【问题标题】:get data first and then() return widget先获取数据然后()返回小部件
【发布时间】:2020-09-26 00:24:36
【问题描述】:

dart 和 firestore 非常新,正在尝试制作动态 Drawer 小部件。进行两次 firebaseDB 调用,一次用于获取 say 事件列表,另一次用于从 Venue master 集合中获取事件的地点图像。

现在的问题是,属性第一次保持为空,再次触发时(关闭和打开抽屉)返回值,尝试在 then() 内返回(如下所示),但没有返回任何内容,因为小部件需要返回一个小部件,

   return ListView.builder(
        reverse: false,
        padding: const EdgeInsets.all(15),
        itemCount: Properties.length,
        itemBuilder: (ctx, i) {

          Firestore.instance.collection('Properties').document(Properties[i]['PropertyId']).get().then((docSnap) {
            property = docSnap;
            print(property['PropertyImage']);
            if (property==null || !property.exists)
              return Center(
                child: CircularProgressIndicator(),
              );
            else
              return InkWell(
                onTap: () {},
                child: Ink.image(
                  image: NetworkImage(property['PropertyImage']),
                  fit: BoxFit.cover,
                  width: 50,
                  height: 50,
                ),
              );
          });

        },
      );

【问题讨论】:

    标签: firebase flutter dart google-cloud-firestore async-await


    【解决方案1】:

    您可能希望将 ListView 包装在 FutureBuilder 中。未来应该以.documents 结尾,在ListView 中你应该使用snapshot.data[index] 来引用一个特定的文档。

    Here 是一个更详细描述它的好视频。

    编辑:如果你真的需要,FutureBuilder 可以在 ListView 中,但这会非常低效,因为它会导致文档被一个一个地获取而不是一次全部获取。

    【讨论】:

    • 但是 FutureBuilder 以后需要documents(): ,我只需要一个带有documentID的文档
    • 然后你需要把FutureBuilder放在Listview.builder里面。这样你就可以一个一个地获取文件
    猜你喜欢
    • 1970-01-01
    • 2012-02-25
    • 1970-01-01
    • 2019-07-17
    • 1970-01-01
    • 2017-11-02
    • 2020-08-19
    • 2017-05-04
    • 1970-01-01
    相关资源
    最近更新 更多