Flatterfehler: RangeError (Index): Ungültiger Wert: Nicht im Bereich 0..2, einschließlich: 3

Lesezeit: 3 Minuten

Benutzer-Avatar
Muhammad Faizan

Ich verwende eine lange Liste in Flutter. Alle Elemente werden gut gerendert, aber ich erhalte auch die folgende Fehlermeldung:

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

Folgendes ist mein Code:

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

Das Folgende ist mein getList() Methode:

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

Und das Folgende ist mein getListItem() Methode:

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

Das Folgende ist der Screenshot des Fehlers:

Geben Sie hier die Bildbeschreibung ein

  • hinzufügen itemCount Parameter zu ListView.builder() Konstrukteur

    – Pskink

    29. Dezember 2018 um 7:53 Uhr


Sie sollten die bestehen itemCount Parameter zum ListView.builder damit es die Anzahl der Elemente kennt

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;
}

  • Was ist, wenn meine Liste keine feste Länge hat (z. B. beim unendlichen Scrollen)?

    Benutzer5125586

    13. März 2019 um 20:53 Uhr

  • @RichardMcFriendOluwamuyiwa Listview.builder ist für eine Liste mit einer bestimmten Länge, Sie können listview verwenden, wenn Sie die Länge nicht kennen

    – Elham Keshavarz

    1. Juni 2019 um 9:56 Uhr

  • Bei AnimatedList hilft es leider nicht

    – Konstantin

    31. Oktober 2019 um 16:43 Uhr


  • Ich verwende SliverList, wo ich keine Option zum Angeben von itemCount finde 🙁

    – B.shruti

    15. April 2020 um 9:01 Uhr

  • @ElhamKeshavarz Ihr Kommentar ist falsch und irreführend. Dies ist die offizielle Beschreibung der listview.builder: This constructor is appropriate for list views with a large (or infinite) number of children because the builder is called only for those children that are actually visible. Providing a non-null itemCount improves the ability of the ListView to estimate the maximum scroll extent.

    – Ojonugwa Jude Ochalifu

    30. Mai 2020 um 9:49 Uhr

Dieser Fehler tritt auf, wenn Ihnen beim Iterieren über ein Array die Werte ausgehen. Im Falle der ListView Komponente die Eigenschaft itemCount fehlt, versucht die Komponente, die Iteration fortzusetzen, weiß jedoch nicht, wann sie abgeschlossen werden muss, sodass sie schließlich außerhalb des Bereichs (der Länge des Arrays) fortfährt.

Sie können diesen Fehler auch sehen, nachdem Sie eine schlechte Einrichtung ausgeführt haben for loop. Zum Beispiel:

var arr = [1, 2, 3];

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

Dieser Dart-Code würde ebenfalls zu einem Bereichsfehler führen. Das Array hat 3 Elemente, aber wir versuchen, 4 Mal zu iterieren.

  • gute ausführliche erklärung

    – Muhammad Faizan

    10. Juni um 3:56

Fügen Sie das Attribut hinzu

    itemCount: list.length,

im listview.builder oder gridview.builder.

Bei mir funktioniert es bei diesem Fehler:

RangeError (index): Invalid value: Not in inclusive range 0..29: 55

Benutzer-Avatar
gebogen

Wenn Sie verwenden StreamBuilder dann müssen Sie diese Codezeile verwenden:

  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];
 },
                      );
                    }
                   
                  },
                ),

In meinem Fall meine itemCount:list.lenght Parameter war in Ordnung, aber irgendwo in meiner listTile habe ich falsche Parameter für verwendet list.indexWhere() Funktion. Wenn ich die Funktion behebe, war der Fehler weg.

Benutzer-Avatar
Rohit Mandiwal

Dies tritt hauptsächlich auf, wenn Sie einen falschen Indexwert verwenden, um Daten aus der Liste abzurufen. in meinem Fall habe ich den gleichen Fehler gemacht.

Benutzer-Avatar
Musfiq Shanta

wenn du benutzt substring und wenn die Bedingung nicht richtig gemacht wurde, erhalten Sie eine Fehlermeldung

  • seine Reichweite Problem, nicht im Zusammenhang mit substring

    – Muhammad Faizan

    10. Juni um 3:55

  • final showd = note.description.length > 60 ? note.description.substring(0, 50) : note.description; Hier erhalten Sie auch einen Bereichsfehler

    – Musfiq Shanta

    11. Juni um 3:36


1215980cookie-checkFlatterfehler: RangeError (Index): Ungültiger Wert: Nicht im Bereich 0..2, einschließlich: 3

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy