flutter - 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'),
),
),
],
),
);
}
}
解决方案
要在第一次停止自动验证,我们应该使用autovalidateMode: AutovalidateMode.onUserInteraction, 而不是autovalidate=true。由于自动验证已弃用。所以像这样使用:-
将 GlobalKey 定义为:
final GlobalKey<FormState> _formKey = GlobalKey<FormState>();
在脚手架上使用这个。
child: new Form(
key: _formKey,
autovalidateMode: AutovalidateMode.onUserInteraction,
child: FormUI(),
),
推荐阅读
- php - PHP MySQLi 更新失败
- sql-server - 为什么行大小很大?
- c# - 在 C# 中将具有大量数据的数据表转换为 Html 时的性能问题
- javascript - 根据另一个数组过滤数组并合并
- python-3.x - pip search 找到 tensorflow,但 pip install 没有
- javascript - 如何将带有画布的画布保存为没有黑色背景的斑点?
- php - 我需要帮助 laravel 5.4 权限被拒绝
- javascript - 如何修复“TypeError:Crud.Select_products 不是函数”,NodeJS 中的错误
- python-3.x - 比较 2 个包含 IP 地址的文件并返回一个不常见的文件
- neo4j - 从 neo4、apoc、Cypher 访问地图值