我正在尝试在无状态小部件中使用TextFormField和ScopedModel处理其文本,但遇到以下各种问题。
我尝试为该字段使用Controller,但每次输入一些文本并在键盘上按“完成”后,文本都会被清除。不知道为什么。
如果我删除Controller,则文本将保留在该字段中,但会出现新问题,即如何从该字段获取文本。我通过使用callback onFieldSubmitted来解决这个问题。
结果发现,只有在我们点击键盘上的Done按钮时才会调用 onFieldSubmitted 回调函数。如果我在字段中输入文本,而不是点击ok,然后点击另一个字段,则回调将不会被调用,并且我将无法追踪用户在字段中输入了什么。
有任何解决方案吗?
附上问题的示例代码。
class LoginPageStateless extends StatelessWidget {
final loginUsernameController = TextEditingController();
@override
Widget build(BuildContext context) {
return Scaffold(
resizeToAvoidBottomPadding: true,
body: ScopedModelDescendant<AccountModel>(
builder: (context, child, model) {
return Form(
//key: _formKey,
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
TextFormField(
style: TextStyle(fontSize: 15.0),
decoration: InputDecoration(
labelText: 'Email id',
hintText: 'johndoe@ipropal.com',
),
controller: loginUsernameController,
onFieldSubmitted: model.updateLoginUsernameText,
),
TextFormField(
style: TextStyle(fontSize: 15.0),
decoration: InputDecoration(
labelText: 'Password',
),
controller: loginUsernameController,
onFieldSubmitted: model.updateLoginUsernameText,
obscureText: true,
),
],
),
);
},
),
);
}
}
Stateful
小部件和作用域模型混合使用没有任何问题。动画和控制器非常适合Stateful
小部件。 - Rémi Rousselet