如何从 Firebase Firestore 获取数据并将其存储在列表中以在 flutter Widgets 中使用?
How to fetch data from Firebase Firestore and store it in a List to use in flutter Widgets?
我正在开发一个应用程序,我需要在其中存储和读取来自 firestore 的数据。目前我正在使用地图列表来生成小部件。我的名单是
List<Map> subjects = [
{"name": "WAK", "time": 13.30, "day": 'Mon'},
{"name": "RAD", "time": 10.30, "day": 'Tue'},
{"name": "PQR", "time": 15.15, "day": 'Fri'}
];
从上面的列表中,我正在生成应用程序将使用列小部件显示的小部件。我的 flutter 屏幕如下所示:
现在,我想实现同样的目标,但我想从 firestore 获取数据而不是预定义列表。为此,我编写了以下代码:
FirebaseFirestore.instance
.collection('classes')
.get()
.then((QuerySnapshot querySnapshot) {
querySnapshot.docs.forEach((doc) {
print(doc.data());
});
});
根据上面的代码,我在终端中得到的输出为:
I/flutter ( 5012): {subject: SE, fromTime: 1115, days: [Mon, Wed]}
I/flutter ( 5012): {subject: OSSS, fromTime: 1430, days: [Tue, Wed, Fri]}
如您所见,每个文档的结构与我上面定义的地图几乎相同,但我无法弄清楚如何从中获取数据并将其存储在地图列表中,以便我可以按照之前生成的方式生成小部件。
另外,有没有更好或更有效的方法从 firestore 获取数据并在我的小部件中使用它。
使用FutureBuilder
:
FutureBuilder<QuerySnapshot>(
future: FirebaseFirestore.instance.collection('classes').get(),
builder: (BuildContext context, AsyncSnapshot<QuerySnapshot> snapshot) {
if (snapshot.hasData) {
return Column(
children: snapshot.data?.docs?.map((doc) {
// your widget here(use doc data)
return YourWidget();
})?.toList() ?? [],
);
} else {
// or your loading widget here
return Container();
}
},
);
希望你明白了:)
我正在开发一个应用程序,我需要在其中存储和读取来自 firestore 的数据。目前我正在使用地图列表来生成小部件。我的名单是
List<Map> subjects = [
{"name": "WAK", "time": 13.30, "day": 'Mon'},
{"name": "RAD", "time": 10.30, "day": 'Tue'},
{"name": "PQR", "time": 15.15, "day": 'Fri'}
];
从上面的列表中,我正在生成应用程序将使用列小部件显示的小部件。我的 flutter 屏幕如下所示:
现在,我想实现同样的目标,但我想从 firestore 获取数据而不是预定义列表。为此,我编写了以下代码:
FirebaseFirestore.instance
.collection('classes')
.get()
.then((QuerySnapshot querySnapshot) {
querySnapshot.docs.forEach((doc) {
print(doc.data());
});
});
根据上面的代码,我在终端中得到的输出为:
I/flutter ( 5012): {subject: SE, fromTime: 1115, days: [Mon, Wed]}
I/flutter ( 5012): {subject: OSSS, fromTime: 1430, days: [Tue, Wed, Fri]}
如您所见,每个文档的结构与我上面定义的地图几乎相同,但我无法弄清楚如何从中获取数据并将其存储在地图列表中,以便我可以按照之前生成的方式生成小部件。 另外,有没有更好或更有效的方法从 firestore 获取数据并在我的小部件中使用它。
使用FutureBuilder
:
FutureBuilder<QuerySnapshot>(
future: FirebaseFirestore.instance.collection('classes').get(),
builder: (BuildContext context, AsyncSnapshot<QuerySnapshot> snapshot) {
if (snapshot.hasData) {
return Column(
children: snapshot.data?.docs?.map((doc) {
// your widget here(use doc data)
return YourWidget();
})?.toList() ?? [],
);
} else {
// or your loading widget here
return Container();
}
},
);
希望你明白了:)