在此示例中,我试图将我保存在列表中的值添加到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(),
),
),
],
)
答案 0 :(得分:0)
您处在正确的轨道上。您可以在这里做两件事:
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(),
),