我正在尝试使用Flutter获取Firebase中集合的长度。我有一个配置文件页面,可从数据库中加载您完成的加息次数,但是在打印变量时,我一直得到Future<int>
。我该如何解决这个问题?
class ProfilePage extends StatefulWidget {
@override
_ProfilePage createState() => new _ProfilePage();
}
int doneHikes;
Database temp = new Database();
class _ProfilePage extends State<ProfilePage> {
@override
void initState() {
super.initState();
_numOfDoneHikes();
}
Future<void> _numOfDoneHikes() async{
var asyncResult = await temp.numOfDoneHikes();
setState(() => doneHikes = asyncResult);
print(doneHikes);
}
数据库对象中的 numOfDoneHikes
函数:
Future<int> numOfDoneHikes() async {
return Firestore.instance.collection(globalUserName)
.document("Done Hikes").collection("Hike List").snapshots().length;
}
使用此代码,我不断得到doneHikes
打印
instance of Future<int>
答案 0 :(得分:0)
您需要先等待文档,然后才能获得列表的length
。为此,您将要使用getDocuments()
而不是snapshots()
,因为后者会返回流:
Future<int> numOfDoneHikes() async {
final documents = await Firestore.instance.collection(globalUserName)
.document("Done Hikes").collection("Hike List").getDocuments();
return documents.length;
}
答案 1 :(得分:0)
您可以使用等待:
Future<int> numOfDoneHikes() async {
return await Firestore.instance.collection(globalUserName)
.document("Done Hikes").collection("Hike List").snapshots().length;
}
事实上,你甚至不需要 await,你可以这样做:
Future<int> numOfDoneHikes() {
return Firestore.instance.collection(globalUserName)
.document("Done Hikes").collection("Hike List").snapshots().length;
}