我想为包含控制器的TextFormField创建包装器小部件,因为我必须在验证函数内部访问TextFormField的值。使用下面粘贴的代码,每次MyTextField获得焦点时,都会再次调用contructor
和build
方法。这会导致重新创建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(
),
...
答案 0 :(得分:2)
如果您需要使用Form()
小部件,则应使用StatefulWidget
而不是StatelessWidget
因此,您只想在代码中使用StatefulWidget
答案 1 :(得分:0)
通过build方法,返回null。
放这个,
TextEditingController myInputController = new TextEditingController();
相反,
TextEditingController myInputController;
MyTextField(){
myInputController = TextEditingController();
}