基本上,我需要将集合的字段保存在一个列表中。
这是负责连接到数据库的小部件:
Future<QuerySnapshot> MissionRetriever1() async{
await FirebaseFirestore.instance
.collection("quest")
.doc("1")
.get();
}这是另一个文件中包含的小部件,它负责将各种数据保存在列表中:
Future<void> getMission1() async{
var snap = await widget.mservice.MissionRetriever1();
for(var doc in snap.docs){
MissionData1.add(doc.data()['Q_Category']);
MissionData1.add(doc.data()['Q_Name']);
MissionData1.add(doc.data()['Q_Description']);
MissionData1.add(doc.data()['Q_Score']);
MissionData1.add(doc.data()['Q_Target']);
}
}但是,当我试图在文本小部件中显示列表中的值时,如下所示:
Text(MissionData1 == null ? "Loading..." : MissionData1[1],
style: TextStyle(
fontWeight: FontWeight.bold,
fontFamily: 'Roboto',
color: const Color(0xFF3A404C),
fontSize: 14.0.sp),),他告诉我列表中没有值( RangeError (索引):无效值:有效值范围为空: 1 )
这是Firestore集合:

发布于 2021-01-21 11:08:56
您不会从MissionRetriever1()返回快照,因此var snap基本上等于零。
这样做吧:
Future<DocumentSnapshot> MissionRetriever1() async{
await FirebaseFirestore.instance
.collection("quest")
.doc("1")
.get();
}Future<void> getMission1() async{
DocumentSnapshot snap = await widget.mservice.MissionRetriever1();
Map<String,dynamic> data = snap.data();
MissionData1.add(data['Q_Category']);
MissionData1.add(data['Q_Name']);
MissionData1.add(data['Q_Description']);
MissionData1.add(data['Q_Score']);
MissionData1.add(data['Q_Target']);
}
}发布于 2021-01-21 09:18:52
Future<QuerySnapshot> MissionRetriever1() async{
QuerySnapshot querySn = await await FirebaseFirestore.instance
.collection("quest")
.get();
return querySn;}然后querySn.docs将返回一个DocumentSnapshot列表。加上您的列表可能是[]而不是null,然后尝试获取第一个元素,其中没有一个
https://stackoverflow.com/questions/65824222
复制相似问题