在Flutter中为Formfield和控制器构建包装器小部件

时间:2019-10-17 12:51:08

标签: flutter dart

我想为包含控制器的TextFormField创建包装器小部件,因为我必须在验证函数内部访问TextFormField的值。使用下面粘贴的代码,每次MyTextField获得焦点时,都会再次调用contructorbuild方法。这会导致重新创建myInputController,导致每次我单击该文本字段时该文本字段为空。

class MyTextField extends StatelessWidget {

  TextEditingController myInputController;

  MyTextField() {
       myInputController = TextEditingController();
  } 

  @override
  Widget build(BuildContext context) {
    print("build called");
    return TextFormField(
      controller: myInputController,
    );
  }
}

我在应用程序内部插入了这样的小部件:

 ...
 child: SingleChildScrollView(
   child: Form(
     key: _formKey,
     child: Column(
       children: <Widget>[
       MyTextField(),
       TextFormField(
              ),
       ...

2 个答案:

答案 0 :(得分:2)

如果您需要使用Form()小部件,则应使用StatefulWidget而不是StatelessWidget

因此,您只想在代码中使用StatefulWidget

答案 1 :(得分:0)

通过build方法,返回null。

放这个,

TextEditingController myInputController = new TextEditingController();

相反,

TextEditingController myInputController;

MyTextField(){
    myInputController = TextEditingController();
}