如何解决如何将List <String>添加到CheckboxListTile值?
在此示例中,我试图将我保存在列表中的值添加到CheckBoxListTile中。 但是由于某种原因,我无法解决这个问题。
全局列表
List<String> _lstNomeData = new List<String>();
价值观地图
Map<String,bool> values = {
'$_lstNomeData[index]': false,};
获取选定的复选框值
var tmpArray = [];
getCheckBoxItems() {
values.forEach((key,value) {
if (value == true) {
tmpArray.add(key);
}
});
print(tmpArray);
tmpArray.clear();
}
身体
body: Column(
children: <Widget>[
Expanded(
child: ListView(
children: values.keys.map((String key) {
return new CheckBoxListTile(
title: new Text(key),value: values[key],activeColor: Colors.blue,checkColor: Colors.white,onChanged: (bool value) {
setState(() {
values[key] = value;
});
},);
}).toList(),),],)
错误 Print of the error displayed
解决方法
您处在正确的轨道上。您可以在这里做两件事:
- 为每个键(您要尝试执行的操作)用
false
预填地图 - 假设如果地图没有键,则答案为
false
(默认)
第二种方法可能更好,因为通过用false
预填充地图,您无法区分false
是用户实际回答的还是默认设置的。如果地图中没有键,则说明用户到目前为止尚未回答问题。我将展示如何使用第二种方法:
按原样保留您的全局列表:
List<String> _lstNomeData = [];
使用空白地图初始化地图(代表用户对每个问题的答案):
Map<String,bool> answers = {};
现在在Checkbox
小部件中正确引用这些答案,并利用onChanged
属性:
ListView(
children: _lstNomeData.map((key) =>
CheckboxListTile(
title: Text(key),// Here we check if the answers map has this key and if it does,use the bool value,otherwise set it to false (user has not answered this so far)
value: answers[key] ?? false,activeColor: Colors.blue,checkColor: Colors.white,onChanged: (answer) =>
setState(() => answers[key] = answer)
),).toList(),),
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。