加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

dart – 在Flutter中导航后无法在新页面中关注TextField

发布时间:2020-12-14 14:48:36 所属栏目:百科 来源:网络整理
导读:出于某种原因,我无法在导航后的下一页上关注TextField.选择TextField时,键盘会自动关闭.如果我在TextField上设置autofocus:true,那么键盘将无限弹出并立即一次又一次地解除. 当我的应用程序大小合理时,我遇到了这个,但我能够在一个最小的示例应用程序中重新
出于某种原因,我无法在导航后的下一页上关注TextField.选择TextField时,键盘会自动关闭.如果我在TextField上设置autofocus:true,那么键盘将无限弹出并立即一次又一次地解除.

当我的应用程序大小合理时,我遇到了这个,但我能够在一个最小的示例应用程序中重新创建它.

我正在使用Dart 2.0.0-dev.55.0和Flutter beta v0.3.2.

主页代码:

import 'package:flutter/material.dart';
import 'settings.dart';

void main() => runApp(new MyApp());

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return new MaterialApp(
      title: 'Flutter Demo',theme: new ThemeData(
        primarySwatch: Colors.blue,),home: new MyHomePage(title: 'Flutter Demo Home Page'),);
  }
}

class MyHomePage extends StatefulWidget {
  MyHomePage({Key key,this.title}) : super(key: key);
  final String title;
  @override
  _MyHomePageState createState() => new _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text(widget.title),body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,children: <Widget>[
            Text('Helpful text.',// ===== Where navigation happens =====
            RaisedButton(
              onPressed: () {
                Navigator.push(context,PageRouteBuilder(
                  pageBuilder: (_,__,___) => SettingsPage()));
              },child: Text('Go to input page'),],);
  }
}

这是包含TextField的页面的代码.

import 'package:flutter/material.dart';

class SettingsPage extends StatefulWidget {
  SettingsPage({Key key}) :
   super(key: key);

  @override
  _SettingsPage createState() => new _SettingsPage();
}


class _SettingsPage extends State<SettingsPage> {

  @override
  Widget build(BuildContext context) {
    final key = GlobalKey<ScaffoldState>();
    return Scaffold(
      key: key,backgroundColor: Colors.white,appBar: AppBar(
        title: Text("Settings"),body: ListView(
        children: <Widget>[
          Text("Enter something"),// Can't focus on this widget
          TextField(),);
  }
}

如果我把TextField放在主页面上,我可以很好地专注于TextField,但是不能放在Settings页面的那个上.我认为它与键盘有关,而不是优先于弹出页面?或者发生了什么?我如何让应用程序专注于导航页面上的输入字段?

解决方法

所以问题来自于我向脚手架提供GlobalKey的事实.删除密钥可以解决问题.不完全确定原因,但问题主要在 Github issue中解释.

在验证输入时显示错误消息时,我正在使用密钥来显示快餐栏,但现在我选择只在文本小部件中显示错误消息.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读