我已经创建了一个值映射表以创建复选框。该映射由String和bool组成,当bool的值更改时,复选框的值也应更改。
编辑1:
我的ListView复选框
CheckboxListTile(
title: new Text(
key,
style: textHeaderStyle,
),
value: _selectedOrders.contains(undeliveryOrders[key]),
activeColor: Colors.pink,
checkColor: Colors.white,
onChanged: (bool value) {
setState(() {
if(value){
_selectedOrders.add(undeliveryOrders[key]);
undeliveryOrders[key] = value;
}else{
setState(() {
_selectedOrders.remove(undeliveryOrders[key]);
});
}
});
},
)
创建地图:
void _formatOrders(availableOrders) {
for (int i = 0; i < availableOrders.length; i++) {
var tempOrder = '${availableOrders[i].customer.uniqueInfo.name} , ${availableOrders[i].address}';
undeliveryOrders['$tempOrder'] = false;
}
print('$undeliveryOrders');
print('$numbers');
}
选定的订购方式
var _selectedOrders = [];
getItems() {
undeliveryOrders.forEach((key, value) {
if (value == false) {
_selectedOrders.add(key);
}
});
print(_selectedOrders);
_selectedOrders.clear();
}
答案 0 :(得分:5)
我认为您可能将每个值都不必映射为布尔值而使事情复杂化,我将被检查的值添加到数组中,然后检查该项目是否在该数组中如果不是假,则为真。您只需要记住如果未选中该复选框,则删除该项目,这里是一些示例代码。
B[b]
答案 1 :(得分:0)
您可以尝试下面的代码吗?
onChanged: (bool value) {
setState(() {
undeliveryOrders[key] = value ?? false;
});
},