flutter - 如何使用 onFieldSubmitted 单独验证 TextFormField

标签 flutter dart

我正在制作一个将被多次使用的自定义 TextFormField 小部件。如何在不验证同一列表/行/列中的任何其他 TextFormField 的情况下验证单个 TextFormField。

Widget timeTextField (TextEditingController controller){
       return TextFormField(
         controller: controller,
         validator: (String userInput){
           if(userInput.isEmpty){return 'Need to input time';}
         },
         onFieldSubmitted: (String userInput){
           setState(() {
             debugPrint(userInput);
             controller.text = "amout";
             debugPrint(controller.text);
         });

   },
   );
 }

它会在用户按下键盘上的提交时进行验证,如果 TextFormField 为空,它只会向用户按下提交的那个 TextFormField 发送验证错误。

最佳答案

TextField 中的验证基于它们所在的Form(而不是ColumnRowList)。要分别验证 TextFields,请将它们放在不同的表单中,分配不同的键并分别调用 _formKey.currentState.validate

class HomePage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    final GlobalKey<FormState> _form1Key = GlobalKey();
    final GlobalKey<FormState> _form2Key = GlobalKey();
    final GlobalKey<FormState> _form3Key = GlobalKey();

    return Scaffold(
      body: Column(
        mainAxisAlignment: MainAxisAlignment.center,
        children: <Widget>[
          Form(
            key: _form1Key,
            child: TextFormField(
              validator: (value) {
                if (value.isEmpty) return "Cannot be empty";
              },
            ),
          ),
          Form(
            key: _form2Key,
            child: TextFormField(
              validator: (value) {
                if (value.isEmpty) return "Cannot be empty";
              },
            ),
          ),
          Form(
            key: _form3Key,
            child: TextFormField(
              validator: (value) {
                if (value.isEmpty) return "Cannot be empty";
              },
            ),
          ),
        ],
      ),
      floatingActionButton: FloatingActionButton(onPressed: () {
        _form2Key.currentState.validate();
      }),
    );
  }
}

关于flutter - 如何使用 onFieldSubmitted 单独验证 TextFormField,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56571864/

相关文章:

android - Scaffold Messenger 问题 : The method 'showSnackBar' was called on null

flutter - BannerAd.dispose 不工作 Flutter Admob

Angular2 dart 属性绑定(bind)未更新

flutter sqflite : Database unstable after hot reload

Flutter,将表单数据发送到电子邮件

flutter - 以编程方式关闭模态底部工作表

firebase - 使用 Flutter ChangeNotifierProvider 进行身份验证

ios - Flutter 点击手势不适用于 UiKitView 和 MapBox

flutter - 使用 AppBarTheme 会导致默认文本大小?

flutter - 如何在状态栏后面绘制 ListView 而无需填充?