首页 > 解决方案 > 除非我热刷新,否则数据流不会在 iOS 上显示

问题描述

我正在创建一个以 firebase 作为后端的颤振应用程序。我有一个数据流,它从 Firestore 集合中提取数据,并在将其转换为列表后将其呈现在 Cupertino Picker 中。问题是当我启动应用程序并使用选择器导航到页面时,列表是空的,除非我热刷新。当我弹出上下文并使用选择器登陆页面时,数据也会显示,否则它是空的。

我的流是这样的:

  Stream<List<DataModel>> get myData {
    return myDataCollection.snapshots().map(_myDataListFromSnapshot);
  }

并将其映射到我的模型并将其转换为如下列表:

  List<DataModel> _myDataListFromSnapshot(QuerySnapshot snapshot) {
    return snapshot.documents.map((doc) {
      return DataModel(
          name: doc.data['name'] ?? '',
          country: doc.data['country'] ?? '');
    }).toList();
  }

这是我的选择器:

return CupertinoPicker(
  useMagnifier: true,
  magnification: 1.1,
  squeeze: 2,
  backgroundColor: CupertinoColors.white,
  itemExtent: 50,
  onSelectedItemChanged: (int index) {},
  children: myData.map((myData) {
    return Text(
      myData.name + ' ' + myData.country,
    );
  }).toList(),
);

有什么我做的不对。我会很感激我能得到的任何帮助。谢谢

标签: firebaseflutterdartgoogle-cloud-firestore

解决方案


您需要使用asyncawait。问题是这样的。您的方法将如下所示:

   Future<List<DataModel>> get myData async {
       return await myDataCollection.snapshots().map(_myDataListFromSnapshot);
       } 

您可以从这里阅读更多内容。


推荐阅读