首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >TextFormField失去价值

TextFormField失去价值
EN

Stack Overflow用户
提问于 2020-07-15 18:42:01
回答 1查看 161关注 0票数 0

我有一个PageView,它有4个子/页/步骤。在第一页上,我有一个TextFormField。用户有义务提供一个值。当严格遵循这些步骤时,错误地将导致用户“请提供一个名称”的错误消息:

TextFormField

  • Tap
  1. 页面是创建
  2. ,在软键盘
  3. 上输入一个值,按下一个按钮到PageView
  4. 的第2页,点击后退按钮,转到PageView

H 111的第1页,点击Next-按钮,转到PageView的第2页:现在,“请提供一个名称”显示给用户。类型化名称在页面上仍然可见,但其验证器中的值为空。

偏离上述情况不会导致错误消息。相关守则:

代码语言:javascript
复制
class CreateWishlist extends StatefulWidget {
  @override
  _CreateWishlistState createState() => _CreateWishlistState();
}

class _CreateWishlistState extends State<CreateWishlist> {
  ...
  final myTitleController = TextEditingController();
  final _form1 = GlobalKey<FormState>();
代码语言:javascript
复制
          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;
                  },
                ),
              ],
            ),
          ),
代码语言:javascript
复制
  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);
  }
EN

回答 1

Stack Overflow用户

发布于 2020-07-16 11:19:57

我试着像上面的评论中描述的那样,但是仍然一样。最后,我设法通过覆盖验证器上的值和onSaved上的控制器值来避免这个问题。

代码语言:javascript
复制
                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;
                  },
                ),
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62921726

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档