플러터 오류: 범위 오류(인덱스): 잘못된 값: 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"];
}
다음은 오류 스크린샷입니다:
이 유형의 오류 호출 인덱스는 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];
},
);
}
},
),
'개발하자' 카테고리의 다른 글
플러터 - 요소를 제거할 때 UI가 올바르게 업데이트되지 않음 (1) | 2023.02.18 |
---|---|
Kubernetes 입력에서 라우팅 경로 제거 (1) | 2023.02.17 |
Flurter/React-Native/Android-Native 앱용 SHA-1 생성 (0) | 2023.02.16 |
플러터 프로젝트의 기본 스왓치 오류 (1) | 2023.02.16 |
Flurter : 다크 모드에서 텍스트 색상 변경 쿠퍼티노 날짜 선택기 (0) | 2023.02.15 |