[英]Cant Retrieve more than one collection in Flutter from cloud firestore
伙計們,我想做的是從 Firestore 數據庫中檢索 2 個集合文檔並顯示到我的 flutter 中,我的代碼是:
Future<QuerySnapshot> getData() async {
var firebaseUser = await FirebaseAuth.instance.currentUser();
return await Firestore.instance
.collection("user")
.where("email", isEqualTo: firebaseUser.email)
.getDocuments();
}
@override
Widget build(BuildContext context) {
// Build a Form widget using the _formKey created above.
return FutureBuilder(
future: getData(),
這允許我從特定用戶檢索數據,但我有另一個名為“shippingAddress”的表單,它創建如下集合:
void createRecord() async {
await databaseReference.collection("shippingAddress").add({
'alias': '$alias',
'shippingName': '$shippingName',
'shippinglastName': '$shippinglastName',
'street': '$street',
'streetNumber': '$streetNumber',
'zipNumber': '$zipNumber',
'phoneNumber': '$phoneNumber',
'textMessage': '$textMessage',
'totalQuantity': '$totalQuantity',
'totalWeight': '$totalWeight',
}).then((value) {
print(value.documentID);
});
}
然后我還必須檢索上述集合,但我不知道如何...因為在同一屏幕中我檢索“用戶”集合以僅顯示來自特定用戶的數據,我還需要檢索“shippingAddress”集合,因為在此類集合中還有其他數據要顯示,例如如果我檢索
${snapshot.data.documents[index].data["email"]} or ${snapshot.data.documents[index].data["name"]}
我已經進入注冊表單,它可以工作,並且在我的小部件中顯示 email 或名稱,但如果我想要檢索:
${snapshot.data.documents[index].data["alias"]}
這是創建到“shippingAddress”集合我無法得到它們
我已經找到了解決方案。 首先從現有用戶那里獲取數據:
final databaseReference = Firestore.instance;
Future<QuerySnapshot> getData() async {
var firebaseUser = await FirebaseAuth.instance.currentUser();
return await Firestore.instance
.collection("user")
.where("email", isEqualTo: firebaseUser.email)
.getDocuments();
}
@override
Widget build(BuildContext context) {
return FutureBuilder(
future: getData(),
builder: (context, AsyncSnapshot<QuerySnapshot> snapshot) {
if (snapshot.connectionState == ConnectionState.done) {
return ListView.builder(
itemCount: snapshot.data.documents.length,
itemBuilder: (BuildContext context, int index) {
return Column(
children: <Widget>[
Stream(),
並使用其他集合調用 Stream Builder:
lass Stream extends StatefulWidget {
@override
_StreamState createState() => _StreamState();
}
class _StreamState extends State<Stream> {
@override
Widget build(BuildContext context) {
return StreamBuilder(
stream: Firestore.instance.collection('shippingAddress').snapshots(),
builder: (context, snapshot) {
if (!snapshot.hasData)
return Text('Loading data please Wait');
return Column(
children: <Widget>[
Container(
height: 1000,
child: ListView.builder(
itemCount: snapshot.data.documents.length,
就這樣!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.