Flutter - TextField 在焦点上重建小部件

标签 flutter textfield

效果就是打不开键盘。我在其他地方对此问题做了一些挖掘,大多数问题是当小部件有状态时(但我的不是)。以下是 LoginWidget。我正在使用提供程序包,我怀疑它可能在幕后做一些事情。有人能发现我看不到的东西吗? :

class LoginPage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    String email, password;
    final GlobalKey<FormState> formKey = GlobalKey<FormState>();
    return ChangeNotifierProvider<LoginModel>(
        builder: (context) => LoginModel(ViewState.Idle),
        child: Consumer<LoginModel>(
            builder: (context, model, child) => Scaffold(
                  appBar: AppBar(
                    title: Text("Sign in"),
                  ),
                  body: Form(
                      key: formKey,
                      child: Column(
                        mainAxisAlignment: MainAxisAlignment.center,
                        children: <Widget>[
                          TextFormField(
                            validator: (input) {
                              if (input.isEmpty) {
                                return "Email required";
                              }
                            },
                            onSaved: (input) => email = input,
                            decoration: InputDecoration(labelText: 'Email'),
                          ),
                          TextFormField(
                            validator: (input) {
                              if (input.isEmpty) {
                                return "Password required";
                              }
                            },
                            onSaved: (input) => password = input,
                            decoration: InputDecoration(labelText: 'Password'),
                            obscureText: true,
                          ),
                          model.state == ViewState.Loading
                              ? CircularProgressIndicator()
                              : RaisedButton(
                                  onPressed: () async {
                                    if (formKey.currentState.validate()) {
                                      formKey.currentState.save();
                                      bool success =
                                          await model.login(email, password);
                                      if (success) {
//                                  Navigator.pushNamed(context, '/');
                                        Navigator.pushReplacement(
                                          context,
                                          MaterialPageRoute(
                                              builder: (context) => HomePage()),
                                        );
                                      }
                                    }
                                  },
                                  child: Text('Sign in'),
                                ),
                          if (model.state == ViewState.Error)
                            Center(child: Text(model.apiErrorMessage))
                        ],
                      )),
                )));
  }
}

最佳答案

解决方案是移动 final GlobalKey<FormState> formKey = GlobalKey<FormState>()走出 builder 并使其成为static .

关于Flutter - TextField 在焦点上重建小部件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56412548/

相关文章:

flutter - 将dart中的 map 更新为firestore

dart - 如何使用 Flutter SQFlite 获取数据库表中的行数

android - 退格键仅删除 TextField 中的一个字母

ios - 如何使用 SkyFloatingLabelTextField 在 swift 中验证 textField

dart - 在 Flutter 中从底部导航栏进行整页路由

android - 调用函数并将参数从 Kotlin 传递给 Flutter

mobile - QML - 显示 "Next"按钮以移动到移动键盘上的下一个 TextField

ios - 如何在 'doneButtonAction' 方法中获取 textField id,同时在 swift 中使用多个 numPad 键盘文本字段?

android - 打开应用程序后 flutter 崩溃

android - 如何在android中的editText中输入最大长度的文本后自动隐藏键盘?