首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >TextFormField验证器没有得到传递给它的值吗?

TextFormField验证器没有得到传递给它的值吗?
EN

Stack Overflow用户
提问于 2020-11-24 17:36:27
回答 2查看 282关注 0票数 0

我有一个纸牌游戏评分应用程序,我正在开发,我有一个错误,我似乎无法弄清楚。希望这里有人看到我的错误,或者能指出潜在的修复方法。我有这样的输入,你可以输入每一位球员的分数。它不过是一列行,其中包含一个包含球员名称的Text()和一个输入/编辑分数的TextFormField()。

在应用程序中显示分数输入/编辑对话框的图像

下面是行的代码:

代码语言:javascript
运行
复制
              child: TextFormField(
                key: Key(p.name),
                keyboardType: TextInputType.number,
                initialValue: p.getRoundScore(round)?.toString() ?? '',
                inputFormatters: [LengthLimitingTextInputFormatter(3)],
                validator: (value) {
                  print('validate => ${p.name} : $value');
                  int score = int.tryParse(value);
                  return (score == null && value != null) ? "Must be a number" : null;
                },
                onChanged: (value) {
                  print('onChange => ${p.name} : $value');
                  setState(() {
                    int score = int.parse(value);
                    if (round == 9) score *= 2; // Queens round
                    if (round == 10) score *= 3; // Kings round
                    p.updateScore(round, score);
                  });
                },
              ),

如果输入分数,如John =2、Hannah=1、Tias=2和Eric=0,然后单击save按钮,我将从print()s获得以下输出:

代码语言:javascript
运行
复制
I/flutter (32660): onChange => John : 2
I/flutter (32660): onChange => Hannah : 1
I/flutter (32660): onChange => Tias : 2
I/flutter (32660): onChange => Eric : 0
I/flutter (32660): validate => John :
I/flutter (32660): validate => Hannah :
I/flutter (32660): validate => Tias :
I/flutter (32660): validate => Eric :

应用程序中的验证输出显示了每个字段的错误:

显示与验证错误相同的分数条目对话框的图像。

为了完整起见,编辑,在这里添加保存按钮的代码:

代码语言:javascript
运行
复制
   if (_formKey.currentState.validate()) {
      _formKey.currentState.save();
      debugPrint(playerToJson(players));
      Navigator.of(context).pop();
  }                                  }                                  

我在这里错过了什么?我可以尝试移除onChange,转而使用TextController,但是这会增加复杂性,因为您可以有3-6个播放器,而且我必须要有多个控制器,因为work...they对于我所需要做的事情来说似乎有点过分了。

我不知道为什么传递给验证器()的“值”总是空字符串,我做错了什么吗?这是个虫子吗?有更好的方法吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-11-24 18:55:16

好的,在进一步挖掘之后,似乎有了onChange就导致了我的问题。尽管谷歌和其他公司的所有例子都表明这是完全可以接受的,但当我将onChange注释掉时,验证器就会得到每个字段传递给它的适当值。这实际上很好,因为只有在验证了值之后,我才应该进行将值保存到模型中的工作,所以我只是将这个逻辑移到验证器中。现在一切都正常运作了。

票数 0
EN

Stack Overflow用户

发布于 2020-11-24 17:53:27

也许您应该用一个表单封装所有的TextFormFields --Widget也使用一个全局键来管理表单。还请参阅颤振验证教程中的步骤1

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64991884

复制
相关文章

相似问题

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