본문 바로가기

개발하자

플러터 오류: 범위 오류(인덱스): 잘못된 값: 0.2 범위에 포함되지 않음: 3

반응형

플러터 오류: 범위 오류(인덱스): 잘못된 값: 0.2 범위에 포함되지 않음: 3

나는 Fluter에서 긴 목록을 사용하고 있다. 모든 항목이 정상적으로 렌더링되지만 다음 오류도 발생합니다:

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

제 코드는 다음과 같습니다:

@override
Widget build(BuildContext context) {
return Container(
  child: 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;
}

그리고 다음은 제 방법입니다:

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

다음은 오류 스크린샷입니다:

enter image description here




이 유형의 오류 호출 인덱스는 Java의 아웃바운드 예외입니다. 그러나 다트의 경우 이러한 오류가 발생하지만 예를 들어 이 ***를 즉시 기록합니다

  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



오류 "RangeError(인덱스): 잘못된 값: 목록에 3개의 항목만 있고 ListView가 있기 때문에 0.2 범위에 있지 않습니다. 3"이 발생합니다.작성기가 존재하지 않는 4번째 항목(인덱스 3)을 빌드하려고 합니다.

이 오류를 수정하려면 ListView가 필요합니다.작성기는 목록에 실제로 존재하는 항목만 작성하려고 합니다. 목록의 길이를 확인하고 ListView의 itemCount 속성에서 적절한 카운트를 반환하여 이 작업을 수행할 수 있습니다.건축업자. 코드를 수정하는 방법은 다음과 같습니다:

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

itemCount: list.length 속성을 추가하면 ListView에 알립니다.목록에 있는 항목 수만큼만 빌드해야 하는 빌드 프로그램입니다. 이렇게 하면 RangeError가 발생하지 않습니다.




이 문제는 주로 잘못된 인덱스 값을 사용하여 목록에서 데이터를 가져올 때 발생합니다. 저 같은 경우에도 같은 실수를 했습니다.




이 오류는 어레이에서 반복할 때 값이 부족할 때 발생합니다. 구성 요소에 itemCount prop이 없는 경우 구성 요소는 계속 반복하려고 하지만 완료 시점을 모르기 때문에 결국 범위를 벗어난 상태(배열의 길이)로 계속됩니다.

제대로 설정되지 않은 상태로 실행한 후에도 이 오류가 표시될 수 있습니다. 예:

var arr = [1, 2, 3];

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

이 다트 코드도 범위 오류를 발생시킵니다. 어레이에는 3개의 아이템이 있지만 우리는 4번 반복하려고 합니다.




나의 경우, 내 매개변수는 괜찮았지만 내 목록의 어딘가에 있다타일, 함수에 잘못된 매개 변수를 사용했습니다.제가 기능을 수정했을 때, 오류가 사라졌습니다.




를 사용하고 조건을 제대로 만들지 않은 경우 오류가 발생합니다




목록 보기.작성기에 항목 수 특성이 있습니다. 다음을 시도할 수 있습니다:

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



매개 변수를 에 전달하여 항목 수를 알 수 있도록 해야 합니다

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



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



를 사용하는 경우 다음 코드 라인을 사용해야 합니다:

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

반응형