【发布时间】:2021-02-05 09:31:20
【问题描述】:
我正在尝试实现添加电子邮件列表输入但用户的功能。这就是我目前所拥有的
List<String> _notificationEmails =[];
var _notificationEmailsController = TextEditingController();
Widget _buildNotificationEmailsInput() {
return TextFormField(
controller: _notificationEmailsController,
style: inputTextStyle,
maxLines: null,
validator: (String value) {
print(value);
if (value.isEmpty) {
return 'Emails Required';
}
return null;
},
onChanged: (String value){
if(value.substring(value.length-1)==','){
print('here');
setState(() {
_notificationEmails.add(value.substring(0,value.length-1));
});
_notificationEmailsController.clear();
}
print(_notificationEmails);
},
);
}
我的预期结果是,当用户输入电子邮件然后在其后添加逗号时,电子邮件将附加到列表中并且输入字段被清除但我得到导致 this _notificationEmails.add(value.substring(0,value.length-1)); 运行到无穷大的操作循环.
这里是日志
[ +3 ms] flutter: [je@gmail.com, je@gmail.com, je@gmail.com, je@gmail.com, je@gmail.com, je@gmail.com, je@gmail.com, je@gmail.com, je@gmail.com, je@gmail.com, je@gmail.com, je@gmail.com, je@gmail.com, je@gmail.com, je@gmail.com, je@gmail.com, je@gmail.com, je@gmail.com, je@gmail.com, je@gmail.com, je@gmail.com, je@gmail.com, je@gmail.com, je@gmail.com, je@gmail.com, je@gmail.com, je@gmail.com, je@gmail.com, je@gmail.com, je@gmail.com, je@gmail.com, je@gmail.com, je@gmail.com, je@gmail.com, je@gmail.com, je@gmail.com, je@gmail.com, je@gmail.com, je@gmail.com, je@gmail.com, je@gmail.com, je@gmail.com, je@gmail.com, je@gmail.com, je@gmail.com, je@gmail.com, je@gmail.com, je@gmail.com, je@gmail.com, je@gmail.com, je@gmail.com, je@gmail.com, je@gmail.com, je@gmail.com, je@gmail.com, je@gmail.com, je@gmail.com, je@gmail.com, je@gmail.com, je@gmail.com, je@gmail.com, je@gmail.com, je@gmail.com, je@gmail.com, je@gmail.com, je@gmail.com, je@gmail.com, je@gmail.com, je@gmail.com, je@gmail.com, je@gmail.com, je@gm<…>
这种情况一直持续下去。我做错了什么?
更新
如果它有帮助,我已经意识到这个问题是因为每次调用 _notificationEmailsController.clear(); 时,它都会触发 onChange() 从而循环。
【问题讨论】:
-
尝试在
setState之前调用clear。我认为 onChange 是由于 setState 而被调用的。 -
@danypata 问题依然存在。
-
你必须在这里做两件事。首先检查电子邮件是否有效,您可以使用正则表达式进行检查,然后检查电子邮件是否已存在于列表中,然后继续添加它
-
@DannyRufus 验证不是我的问题
-
@Bright 我更新了我的答案,只使用
TextEditingController的相同实例。
标签: flutter controller textformfield