使用Redux在Flutter中存储表单的GlobalKey的正确方法

时间:2018-12-06 08:46:46

标签: flutter

我目前正在使用Redux与Flutter进行项目。 我非常喜欢使用Redux时,大多数小部件都可以保留为StatelessWidget,而不是管理StatefulWidget内部的状态。

但是我遇到了一些问题。

class MyForm extends StatelessWidget {
  GlobalKey<FormState> formKey = GlobalKey<FormState>;
  @override
  Widget build(BuildContext context) {
    return Form(
      key: formKey,
      child: TextFormField(
        autofocus: true
        validator: someValidatorLogic
      )
    )
  }
}

我需要的是formKey来进行验证,当按下按钮时,并且我需要在TextFormField上聚焦到过渡到屏幕上。

由于formKey是类参数,因此似乎每次都会更改。因此,发生的是TextFormField每次都自动散焦。

当前,我将GlobalKey存储在Redux存储中,但是将它存储在Redux存储中确实感觉很不对劲,因为我觉得GlobalKey是视图的参数。存储此密钥的正确方法是什么?

谢谢

2 个答案:

答案 0 :(得分:0)

有几种可能性:

  • 将其设为静态变量,而不是类字段。容易,但暗示该窗口小部件只能一次使用。
  • 将小部件转换为StatefulWidget。总体上首选的解决方案。

答案 1 :(得分:0)

转换到 statefulWidget 和这个代码 final _formKey = GlobalKey();