首页 > 解决方案 > Flutter Form Autovalidate 首次触发

问题描述

我在第一次启动应用程序时遇到错误,所有文本字段都在验证,但一定不是这样,我从颤振文档中获取了表单示例,并添加了 autovalidate:true,在 web 上它可以正常工作,但有一个物理设备和模拟器它不工作,错误和代码如下

在此处输入图像描述

import 'package:flutter/material.dart';

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
 @override
 Widget build(BuildContext context) {
   final appTitle = 'Form Validation Demo';

   return MaterialApp(
    title: appTitle,
    home: Scaffold(
     appBar: AppBar(
       title: Text(appTitle),
     ),
     body: MyCustomForm(),
   ),
  );
 }
}

class MyCustomForm extends StatefulWidget {
  @override
  MyCustomFormState createState() {
    return MyCustomFormState();
  }
}


class MyCustomFormState extends State<MyCustomForm> {

 final _formKey = GlobalKey<FormState>();

 @override
 Widget build(BuildContext context) {

  return Form(
    autovalidate:true,
    key: _formKey,
    child: Column(
      crossAxisAlignment: CrossAxisAlignment.start,
      children: <Widget>[
        TextFormField(
          validator: (value) {
            if (value.isEmpty) {
              return 'Please enter some text';
            }
            return null;
          },
        ),
        Padding(
          padding: const EdgeInsets.symmetric(vertical: 16.0),
          child: RaisedButton(
            onPressed: () {                
              if (_formKey.currentState.validate()) {  
                Scaffold.of(context)
                  .showSnackBar(SnackBar(content: Text('Processing Data')));
              }
            },
            child: Text('Submit'),
          ),
        ),
      ],
    ),
  );
 }
}

标签: flutter

解决方案


要在第一次停止自动验证,我们应该使用autovalidateMode: AutovalidateMode.onUserInteraction, 而不是autovalidate=true。由于自动验证弃用。所以像这样使用:-

将 GlobalKey 定义为:

final GlobalKey<FormState> _formKey = GlobalKey<FormState>();

在脚手架上使用这个。

child: new Form(
              key: _formKey,
              autovalidateMode: AutovalidateMode.onUserInteraction,
              child: FormUI(),
            ),

推荐阅读