我正在尝试生成一个带有 checkboxlisttile 的卡片列表,以便可以单独检查每个项目,但它是生成的,因此我无法为每个项目创建一个 set var。
bool _isChecked = false;
CheckboxListTile(
title: Text(itemNameList[index]),
secondary: Icon(itemIconList[index]),
subtitle: Row(
children: [
Text('R ${itemPriceList[index]}'),
Padding(
padding: const EdgeInsets.only(left: 25.0),
child: Text("x2"),
),
],
),
value: _isChecked,
onChanged: (bool? value) {
setState(() {
if(_isChecked == true){
_isChecked = false;
}else{
_isChecked = true;
}
});
},
),
有什么提示可以让它生成但保持它自己的状态,因为当点击它时它会检查同时生成的所有 checkboxlisttiles?
答案 0 :(得分:0)
因为您使用一个变量来处理所有项目的可检查性,以及当您检查和项目时;它更新变量值,并相应地 setState
更新所有项目。
解决方案:您的方法非常复杂。您正在创建项目的每个属性的列表。一种解决方案是创建另一个处理可检查性的布尔值列表。第二种解决方案是创建一个具有所有属性的自定义模型列表。例如
class YourModelName{
//if your date type is different use that
String name = '';
String icon = '';
String price = '';
bool isChecked = false;
YourModelName({
//user @required if you are not using null safety
required this.name,
required this.icon,
required this.price,
required this.isChecked
});
}
模型列表的用法如下
CheckboxListTile(
title: Text(modelsList[index].name),
secondary: Icon(modelsList[index].icon),
subtitle: Row(
children: [
Text('R ${modelsList[index].price}'),
Padding(
padding: const EdgeInsets.only(left: 25.0),
child: Text("x2"),
),
],
),
value: model.isChecked,
onChanged: (bool? value) {
setState(() {
modelsList[index].isChecked = !modelsList[index].isChecked;
});
},
)