我在更一般的基础上重新创建了这个错误。
这是我的代码:
import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:flutter/material.dart';
class Test extends StatefulWidget {
const Test({Key? key}) : super(key: key);
@override
_TestState createState() => _TestState();
}
class _TestState extends State<Test> {
List<int> intlist = [];
List<String> stringList = [];
Future getIDlist() async {
List<int> list1 = [];
List<int> list2 = [];
for (int i = 0; i < 18; i++) {
var firebaseShop = await FirebaseFirestore.instance
.collection('Collection')
.doc('Data')
.get();
var dataShop = firebaseShop.data();
if (dataShop?['x']) { //Data is a boolean
list1.add(i);
} else {
list2.add(i);
}
}
intlist.addAll(list1);
intlist.addAll(list2);
stringList = intlist.map((int value) => value.toString()).toList();
}
@override
Widget build(BuildContext context) {
return Scaffold(
body: Text(
stringList[0],
),
);
}
}
这是我得到的错误:
Exception caught by widgets library:
The following RangeError was thrown building Test(dirty, state: _TestState#debf0):
**RangeError (index): Invalid value: Valid value range is empty: 0**
只是找不到答案,希望你能帮忙!
1条答案
按热度按时间tvmytwxo1#
您从未调用
getIDlist()
,这将需要一些时间来获取数据。最好使用FutureBuilder
作为将来的方法。因此
stringList
保持空列表并发生错误。对于目前的捷径你可以做的
在渲染文本时,进行数据检查。
但为了获得更好的实践,请检查FutureBuilder和firestore/query-data/get-data