Pyb*_*ana 6 dart flutter dart-2
出于某种原因,我无法在导航后的下一页上关注TextField.选择TextField时,键盘会自动关闭.如果我autofocus: true在TextField上设置,那么键盘将无限弹出并立即一次又一次地解除.
当我的应用程序大小合理时,我遇到了这个,但我能够在一个最小的示例应用程序中重新创建它.
我正在使用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'),
            ),
          ],
        ),
      ),
    );
  }
}
Run Code Online (Sandbox Code Playgroud)
这是包含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(),
        ],
      ),
    );
  }
}
Run Code Online (Sandbox Code Playgroud)
如果我把TextField放在主页面上,我可以很好地专注于TextField,但是不能放在Settings页面的那个上.我认为它与键盘有关,而不是优先于弹出页面?或者发生了什么?我如何让应用程序专注于导航页面上的输入字段?
所以问题来自于我向 Scaffold 提供 GlobalKey 的事实。删除密钥可以解决问题。不确定为什么,但这个问题主要在这个Github 问题中得到了解释。
在验证输入时显示错误消息时,我使用该键来弹出小吃栏,但现在我选择只在文本小部件中显示错误消息。
|   归档时间:  |  
           
  |  
        
|   查看次数:  |  
           3265 次  |  
        
|   最近记录:  |