Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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

I am using a long list in Flutter. All the items are rendering fine but I also receive the following error:

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

The following is my code:

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

The following is my getList() method:

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

And the following is my getListItem() method:

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

the following is the screenshot of error:

enter image description here

like image 733
Muhammad Faizan Avatar asked Dec 29 '18 07:12

Muhammad Faizan


3 Answers

You should pass the itemCount parameter to the ListView.builder to allow it to know the item count

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;
}
like image 185
muttonlamb Avatar answered Nov 05 '22 19:11

muttonlamb


This error occurs when you run out of values when iterating over an array. In the case of the ListView component missing the itemCount prop, the component attempts to continue to iterate but is unaware when to complete so it eventually continues on out of range (the length of the array).

You could also see this error after running a poorly set up for loop. For example:

var arr = [1, 2, 3];

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

This dart code would result in a range error as well. The array has 3 items yet we attempt to iterate 4 times.

like image 14
grimmm Avatar answered Nov 05 '22 21:11

grimmm


In my case, my itemCount:list.lenght parameter was fine but somewhere in my listTile, I used wrong parameter for list.indexWhere() function .When I fix function, error was gone.

like image 3
replapp Avatar answered Nov 05 '22 19:11

replapp