繁体   English   中英

退货清单<user>来自 Firestore Flutter</user>

[英]Return List<User> from Firestore Flutter

我想从 Firestore 返回一个List<User> ,问题是这个询问的结果是一个空列表。 我确定问题在于我如何处理将项目添加到现有列表的过程,也许我没有等待它们或类似的东西。

我将显示代码:

List<User> readUsers(String path, int limit) {
    List<User> users = [];
    FirebaseFirestore.instance
        .collection(path)
        .limit(limit)
        .get()
        .then((snapshot) {
      if (snapshot == null)
        print("Snapshot is null");
      else {
        snapshot.docs.forEach((data) {
          User user = User(
            name: data['name'],
            id: data['id'],
          );
          users.insert(0, user);
        });
      }
    });
    if (users.isNotEmpty) {
      users.forEach((element) {
        element == null ? print("") : print(element.id);
      });
    } else {
      print("User is empty!");
    }
    return users;
  }

这个 function 的结果总是print “用户为空”。

编辑:来自此 function 的数据必须存储在变量中,并且值必须打印如下:

try {
List<User> users;
        widget.database
            .readUsers("users", 2)
            .then((value) => users = value);
        users.forEach((element) {
          print(element.id);
        });
      } catch (e) {
        print(e);
      }

现在users的价值还是null。

您的代码中有两个问题。

  1. 您的 Firebase 调用是async的,并且在您测试 List users的空性之前不会完成。 这就是您的List<User>始终为空的原因。 您应该将readUsers定义为async ,并await QuerySnapshot
  2. 如果您检查cloud_firestore 的 API ,您将看到您的snapshot.docsList<QueryDocumentSnapshot> 应使用方法data()访问数据。

尝试这个:

Future<List<User>> readUsers(String path, int limit) async {
  final snapshot =
      await FirebaseFirestore.instance.collection(path).limit(limit).get();
  return snapshot.docs
      .map(
        (doc) => User(
          id: doc.data()['id'],
          name: doc.data()['name'],
        ),
      )
      .toList();
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM