动态创建布尔列表报错RangeError(index),求问题原因及解决办法
问题原因
你写的代码里,variableOne和variableTwo初始是空列表,长度为0。Dart里不能直接给空列表的索引位置赋值——因为此时列表里根本没有对应索引的元素,比如索引0的位置不存在,所以会抛出RangeError越界错误。
解决方法
有几种简单的修正方式:
方法1:用add()方法添加元素
循环里通过add往列表末尾追加元素,这是动态列表添加元素的标准方式:
List<bool> variableOne= []; List<bool> variableTwo= []; for (var i = 0; i < 3; i++) { variableOne.add(false); variableTwo.add(true); }
方法2:初始化时直接指定长度并填充值
如果知道列表固定长度,直接用List.filled创建更高效:
// 创建长度为3的列表,所有元素默认false List<bool> variableOne = List.filled(3, false); // 创建长度为3的列表,所有元素默认true List<bool> variableTwo = List.filled(3, true);
方法3:用List.generate生成列表
适合需要动态生成每个元素的场景(这里每个元素值相同,也能用):
List<bool> variableOne = List.generate(3, (_) => false); List<bool> variableTwo = List.generate(3, (_) => true);
验证结果
上面三种方法都能得到你期望的结果:
variableOne[0] = false; variableTwo[0] = true; variableOne[1] = false; variableTwo[1] = true; variableOne[2] = false; variableTwo[2] = true;
内容的提问来源于stack exchange,提问作者BradG
相关产品推荐
相关产品推荐

