由于某些原因,我无法在导航后转到下一页后专注于TextField.当 Select 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放在主页上,我可以很好地聚焦在那里,但不能放在Settings页面中的TextField上.我想这和键盘没有优先于弹出的页面有关吧?还是怎么回事?如何让应用程序只关注导航页面上的输入字段?

推荐答案

所以问题来自于我正在给脚手架提供GlobalKey.移除密钥解决了这个问题.不太清楚原因,但这Github issue篇文章主要解释了这个问题.

在验证输入时,我使用键在显示错误消息时弹出快捷栏,但现在我 Select 只在文本小部件中显示错误消息.

Dart相关问答推荐

Flutter 网页打开网址并获取数据

Flutter中TextFieldForm中的字母间距

AngularDart 可以直接路由到组件吗?

如何在 Dart 中创建画布元素?

如何使用 Dart 分析器从源代码生成 AST 并使用 AST?

你如何在 Polymer 中调度和监听自定义事件?

为什么Dart中的 abs() 函数在没有用括号括起来时返回负数?

Bad state:在Flutter中从 addStream 添加项目时,您无法关闭主题

为什么使用Dart作为前端开发人员?

未定义命名参数child.在 Center() 构造函数中

如何在 Dart 中监听自定义事件?

如何将 Stream 转换为 List

如何使用flatter删除Firestore文档中的字段

Visual Studio 的 Dart 插件

如何在 Dart 2 中clone复杂对象

将符号转换为字符串

为什么不推荐使用 context2d.backingStorePixelRatio?

在 Dart 中,你能不能从一个构造函数中调用另一个构造函数

如何在 Dart 中生成唯一 id

如何在 Dart 中将日期/时间字符串转换为 DateTime 对象?