范围错误(索引):无效值:有效值范围为空:使用复选框和 for 循环时返回 0


class HostAMealCard extends StatefulWidget {
HostAMealCard(this.combo);
final Combo combo;
@override
_HostAMealCardState createState() => _HostAMealCardState();
}
class _HostAMealCardState extends State<HostAMealCard> {
@override
Widget build(BuildContext context) {
return Container(
height: (50 * widget.combo.items.length + 75).toDouble(),
child: Card(
child: ListView.builder(
itemCount: widget.combo.items.length,
physics: NeverScrollableScrollPhysics(),
itemBuilder: (context, index) {
return OneMeal(widget.combo, index);
},
)),
);
}
}
class OneMeal extends StatefulWidget {
OneMeal(this.combo, this.index);
final Combo combo;
final int index;
//int count = combo.items.length;
@override
State<StatefulWidget> createState() => OneMealState();
}
class OneMealState extends State<OneMeal> {
List<bool> Vals = new List();
@override
void initState() {
super.initState();
int count = widget.combo.items.length;
for (int i = 0; i < count; i++) {      //This for loop gives exception
Vals[i] = false;
}
}
@override
Widget build(BuildContext context) {
return Stack(
children: <Widget>[
Align(
child: Text(widget.combo.items[widget.index].item.toString()),
alignment: Alignment(-1, 0),
),
Align(
child: Text(widget.combo.items[widget.index].price.toString()),
alignment: Alignment(0.2, 0)),
Align(
child: Checkbox(               //This checkbox gives exception
value: Vals[widget.index],
onChanged: (bool value) {
setState(() {
Vals[widget.index] = value;
});
},
),
alignment: Alignment(0.6, 0.4)),
],
);
}
}

HostAMealCard类是一张包含食物组合的卡片。每个项目都有一个与之关联的复选框。每张卡片中的项目数是动态的。 异常由 for 循环和复选框引发。 此外,类 HostAMealCard 作为 FutureBuilder 的 itemBuilder 返回。 有没有更简单的方法来实现我在这里想要做的事情?

Vals的长度为 0,因此访问它的任何位置当然会引发异常。

您应该这样做:

Vals.add(false)

或者更好的是,您可以替换 for 循环并以这种方式初始化initState中的Vals

Vals = List<bool>.generate(widget.combo.items.length, (_) => false);

最新更新