表单有效后立即显示元素

时间:2020-07-06 14:33:25

标签: flutter

我正在尝试在表单生效后立即显示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'))

1 个答案:

答案 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)
          ]
        )

解决方案:对于各种情况,您必须检查所有不同的布尔值是否正确,然后才能显示/隐藏数据。

结果

RESULTANT GIF

让我知道是否对您有用:)