我有一个PageView,它有4个子/页/步骤。在第一页上,我有一个TextFormField。用户有义务提供一个值。当严格遵循这些步骤时,错误地将导致用户“请提供一个名称”的错误消息:
TextFormField
H 111的第1页,点击Next-按钮,转到PageView的第2页:现在,“请提供一个名称”显示给用户。类型化名称在页面上仍然可见,但其验证器中的值为空。
偏离上述情况不会导致错误消息。相关守则:
class CreateWishlist extends StatefulWidget {
@override
_CreateWishlistState createState() => _CreateWishlistState();
}
class _CreateWishlistState extends State<CreateWishlist> {
...
final myTitleController = TextEditingController();
final _form1 = GlobalKey<FormState>(); Form(
key: _form1,
child: Column(
children: <Widget>[
TextFormField(
decoration: InputDecoration(hintText: 'Name'),
textInputAction: TextInputAction.done,
onSaved: (value) {
_createWishlistData['title'] = value.trim();
},
controller: myTitleController,
validator: (value) {
if (value.trim().isEmpty) return 'Please provide a name';
return null;
},
),
],
),
), next(int pageIndex) {
if (pageIndex == 0) {
FocusScopeNode currentFocus = FocusScope.of(context);
if (!currentFocus.hasPrimaryFocus) {
currentFocus.unfocus();
}
if (!_form1.currentState.validate()) {
return;
}
_form1.currentState.save();
}
controller.animateToPage(pageIndex + 1,
duration: Duration(seconds: 1), curve: Curves.ease);
}发布于 2020-07-16 11:19:57
我试着像上面的评论中描述的那样,但是仍然一样。最后,我设法通过覆盖验证器上的值和onSaved上的控制器值来避免这个问题。
TextFormField(
style: formFieldTextStyle,
decoration: InputDecoration(hintText: 'Name'),
textInputAction: TextInputAction.done,
onSaved: (value) {
value = myTitleController.text;
_createWishlistData['title'] = value.trim();
},
controller: myTitleController,
validator: (value) {
value = myTitleController.text;
if (value.trim().isEmpty) return 'Please provide a name';
return null;
},
),https://stackoverflow.com/questions/62921726
复制相似问题