Flutter 自定义验证TextFormField颤振
我有表单和TextFormField在里面:Flutter 自定义验证TextFormField颤振,flutter,Flutter,我有表单和TextFormField在里面: new Expanded( child: TextFormField( style: new TextStyle(color: Colors.white), keyboardType: TextInputType.text, validator: (String value) { if (value.length <= 5) { //Show error as a Snackbar
new Expanded(
child: TextFormField(
style: new TextStyle(color: Colors.white),
keyboardType: TextInputType.text,
validator: (String value) {
if (value.length <= 5) {
//Show error as a Snackbar
}
},
onSaved: (String value) {},
),
)
现在的问题是当你调用<代码>验证()/<代码>,并且不返回任何代码在<代码>验证()/<代码>方法中,那么它会认为它返回true。 我不想在文本字段下面显示错误,而是作为一个快捷键
此外,我尝试在每个验证器方法中设置一个额外的标志和设置,但如果表单中有多个字段,则会变得复杂 有谁能告诉我如何处理这种情况,\u formKey.currentState.validate()
应该返回false和validator方法
内部TextFormField不需要返回错误文本。如果您不想在TextField中显示错误,您不应该是用户表单小部件和TextFormField 您应该由控制器执行验证 比如说
class MyHomePage extends StatefulWidget {
@override
MyHomePageState createState() {
return new MyHomePageState();
}
}
class MyHomePageState extends State<MyHomePage> {
final _text = TextEditingController();
bool _validate = false;
@override
void dispose() {
_text.dispose();
super.dispose();
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('TextField Demo'),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Text('Error Showed if Field is Empty on Submit button Pressed'),
TextField(
controller: _text,
decoration: InputDecoration(
labelText: 'Enter the Value',
),
),
RaisedButton(
onPressed: () {
if(_text.text.length<=5){
// open dialog
}
},
child: Text('Submit'),
textColor: Colors.white,
color: Colors.blueAccent,
)
],
),
),
);
}
}
类MyHomePage扩展StatefulWidget{
@凌驾
MyHomePageState createState(){
返回新的MyHomePageState();
}
}
类MyHomePageState扩展了状态{
final _text=TextEditingController();
bool _validate=false;
@凌驾
无效处置(){
_text.dispose();
super.dispose();
}
@凌驾
小部件构建(构建上下文){
返回脚手架(
appBar:appBar(
标题:文本(“文本字段演示”),
),
正文:中(
子:列(
mainAxisAlignment:mainAxisAlignment.center,
儿童:[
文本('如果按下提交按钮时字段为空,则显示错误'),
文本字段(
控制器:\文本,
装饰:输入装饰(
labelText:“输入值”,
),
),
升起的按钮(
已按下:(){
如果(_text.text.lengthan)我们可以用控制器做什么?只是一个空检查?您也可以按控制器检查字符串的长度。控制器提供文本字段值为什么有设置状态?这是我的要求。更新答案请检查
class MyHomePage extends StatefulWidget {
@override
MyHomePageState createState() {
return new MyHomePageState();
}
}
class MyHomePageState extends State<MyHomePage> {
final _text = TextEditingController();
bool _validate = false;
@override
void dispose() {
_text.dispose();
super.dispose();
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('TextField Demo'),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Text('Error Showed if Field is Empty on Submit button Pressed'),
TextField(
controller: _text,
decoration: InputDecoration(
labelText: 'Enter the Value',
),
),
RaisedButton(
onPressed: () {
if(_text.text.length<=5){
// open dialog
}
},
child: Text('Submit'),
textColor: Colors.white,
color: Colors.blueAccent,
)
],
),
),
);
}
}