我正在一个项目中,以从firestore中获取我的子集合数据。我有一个单独的文件,可通过Stream从主集合中获取数据,现在我试图获取子集合数据,我的子集合由一个主集合和其中的许多不同文档组成,我以后需要访问。在主页上,我正在使用Streambuilder将数据获取到主页。
这是我要获取主要收集数据的文件:
import 'package:flutter/material.dart';
import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:homeautomation/modelos/dadosusuario.dart';
import 'package:homeautomation/modelos/user.dart';
class DatabaseService {
//Colection reference
final String uid;
DatabaseService({this.uid});
final CollectionReference userdata = Firestore.instance.collection('dadosusuarios');
Stream<DocumentSnapshot> get userData{
return userdata.document(uid).snapshots();
}
}
这是主页:
return StreamBuilder<DocumentSnapshot>(
stream: DatabaseService(uid: user.uid).userData,
builder : ((context, snapshot){
if (!snapshot.hasData) {
return Loading();
}
int cardamount = snapshot.data['btncount'];
//var botao = Firestore.instance.collection('dadosusuarios').document('5j5UF0lFovW8g5QSXXymWYsz0QB2').collection('buttons').document().get();
//print(botao);
List<bool> cardsValue = [snapshot.data['device1'], snapshot.data['device2'], snapshot.data['device3']];
return Scaffold(
当我在主页上使用它时
var botao = Firestore.instance.collection('dadosusuarios').document('5j5UF0lFovW8g5QSXXymWYsz0QB2').collection('buttons').document().get();
print(botao);
打印结果为:
Instance of 'Future<DocumentSnapshot>'
答案 0 :(得分:1)
在此语句中,您没有将任何参数传递给document():
var botao = Firestore.instance
.collection('dadosusuarios')
.document('5j5UF0lFovW8g5QSXXymWYsz0QB2')
.collection('buttons')
.document()
.get();
这实际上对访问数据没有任何意义。如果要查询子集合,则应在子集合引用上调用get():
Firestore.instance
.collection('dadosusuarios')
.document('5j5UF0lFovW8g5QSXXymWYsz0QB2')
.collection('buttons')
.get();
这将为您提供一个Future,可用于迭代所有文档。
答案 1 :(得分:1)
您将得到的结果为Future<DocumentSnapshot>
,因为Firestore将花费一些时间将查询作为其async call
处理。要获得结果,您必须使用await
关键字或您可以使用。
正如@Doug Stevenson指出的那样,您的查询需要更新。 这是更新的代码。
var botao = await Firestore.instance.collection('dadosusuarios').document('5j5UF0lFovW8g5QSXXymWYsz0QB2').collection('buttons').getDocuments();
print(botao);
我建议您研究Asynchronous programming。