我正在尝试在表单生效后立即显示element。根据flutter文档,我需要使用_formKey.currentState.validate(),但是在文档中,它是在单击按钮时使用的,而我试图使用它来显示/隐藏元素。
工作代码(在flutter教程中使用)
return Form(
key: _formKey,
child: Column(
children: [
TextFormField(
autovalidate: true,
validator: validateName,
),
RaisedButton(
onPressed: () => _formKey.currentState.validate()
? print('valid')
: print('not valid'))
我的代码出现(INVALID MEMER OF NULL:'validate)错误
return Form(
key: _formKey,
child: Column(
children: [
TextFormField(
autovalidate: true,
validator: validateName,
),
_formKey.currentState.validate()
? Container(child: Text('valid'))
: Container(child: Text('not valid'))
答案 0 :(得分:1)
您最好的答案是使用TextFormField
类型的ValueChanged
onChanged,它可以跟踪您在TextFormField
中所做的更改>
优势
您将能够跟踪文本的更改,并根据此显示/隐藏内容
缺点
每个
TextField
应该为不同的bool
维护TextField
,以跟踪项目
这就像一种解决方法,因此可以以这种方式使用。 我正在使用单个TextFormField来显示其工作方式,然后您可以在TextFormField
上进行操作并使其运行。
最终解决方案
bool isValid = false;
final TextEditingController _controller = new TextEditingController();
Column(
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
TextFormField(
decoration: InputDecoration(hintText: 'Enter your data'),
controller: _controller,
onChanged: (String val){
setState((){
if(val.length >= 4) isValid = true;
else isValid = false;
});
}
),
SizedBox(height: 20.0),
isValid ? Text('Valid String', textAlign: TextAlign.center) : Text('Name must be more than 3 character', textAlign: TextAlign.center)
]
)
解决方案:对于各种情况,您必须检查所有不同的布尔值是否正确,然后才能显示/隐藏数据。
结果
让我知道是否对您有用:)