Flutter误差:范围错误(索引):无效值:不在0..2范围内(含):3

hgncfbus  于 2023-02-16  发布在  Flutter
关注(0)|答案(9)|浏览(162)

我在Flutter中使用了一个很长的列表。所有的项目都渲染得很好,但我也收到了以下错误:

RangeError (index): Invalid value: Not in range 0..2, inclusive: 3

下面是我的代码:

@override
Widget build(BuildContext context) {
return Container(
  child: getList(),
 );
}

下面是我的getList()方法:

Widget getList (){
List<String> list = getListItems();
ListView myList = new ListView.builder(itemBuilder: (context, index){
  return new ListTile(
    title: new Text(list[index]),
  );
});
return myList;
}

下面是我的getListItem()方法:

List<String> getListItems(){
return ["Faizan", "Usman", "Naouman"];
}

以下是错误的屏幕截图:

eit6fx6z

eit6fx6z1#

您应该将itemCount参数传递给ListView.builder,以允许它知道项目计数

Widget getList() {
  List<String> list = getListItems();
  ListView myList = new ListView.builder(
    itemCount: list.length,
    itemBuilder: (context, index) {
    return new ListTile(
      title: new Text(list[index]),
    );
  });
  return myList;
}
ztyzrc3y

ztyzrc3y2#

如果迭代数组时用完所有值,则会发生此错误。如果ListView组件缺少itemCount属性,则该组件会尝试继续迭代,但不知道何时完成,因此它最终会在超出范围(数组长度)时继续。
在运行设置不佳的for loop后,您也可能会看到此错误。

var arr = [1, 2, 3];

for (var i=0; i < 4; i++) {
    print(arr[i]);
}

这个dart代码也会导致一个范围错误。数组有3个元素,但是我们尝试迭代了4次。

0mkxixxg

0mkxixxg3#

在我的例子中,我的itemCount:list.lenght参数是正确的,但是在我的listTile中的某个地方,我使用了错误的list.indexWhere()函数参数。当我修复函数时,错误消失了。

olqngx59

olqngx594#

如果使用StreamBuilder,则必须使用以下代码行:

StreamBuilder(
                  stream: FirebaseFirestore.instance.collection("Tooth")
                  .orderBy("date", descending: false).snapshots() ,
                
                  builder: (BuildContext context, AsyncSnapshot<QuerySnapshot> snapshot){
                 
                    if(snapshot.hasData)
                    {
                      return ListView.builder(
                        itemCount: snapshot.data.docs.length,
                          padding: const EdgeInsets.only( top: 20.0),
                        itemBuilder: (BuildContext context, int index) {
                           DocumentSnapshot ds = snapshot.data.docs[index];
 },
                      );
                    }
                   
                  },
                ),
okxuctiv

okxuctiv5#

如果您使用substring且没有正确设置条件,那么您将得到一个错误

kmb7vmvb

kmb7vmvb6#

这主要发生在你使用错误的索引值从列表中获取数据的时候。在我的例子中,我也犯了同样的错误。

mctunoxg

mctunoxg7#

Listview.Builder包含itemcount属性。您可以尝试执行以下操作:

Listview.Builder(
    itemCount : list.length,
    itemBuilde:(context, index)=>
);
flseospp

flseospp8#

在java中,此类型错误调用indexoutofboundsexception,但在dart情况下,您会得到如下错误

    • 范围错误(索引):无效值:不在包含范围0..12内:第十三章**

但您必须写入此时间的int lastElement = myList[myList.length];瞬间**
int lastElement = myList[myList.length - 1];**
例如

List<int> myList = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13];
int lastElement = myList[myList.length - 1]; // Accessing the 12th element
4dbbbstv

4dbbbstv9#

Widget getListView(){
  var itemList = getListElement();
   var list = ListView.builder(
     itemCount: itemList.length,
       itemBuilder:(context, index){
         return ListTile(
           title: Text(itemList[index]),   
         );
         }
   );
   return list;
}

相关问题