Future <int>无法从Firebase获取数据

时间:2019-03-19 21:59:21

标签: firebase dart flutter google-cloud-firestore future

我正在尝试使用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>

2 个答案:

答案 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;
}