【问题标题】:Retrieving an array from Firestore DocumentSnapshot从 Firestore DocumentSnapshot 中检索数组
【发布时间】:2020-07-02 20:30:55
【问题描述】:

我正在尝试从 Firestore 文档中检索一个数组。我在每个名为“请求”的文档中都有一个包含字符串的数组。

当它被调用时,下面的未来永远不会解决。

Future<List<String>> getRequests() {
  return Firestore.instance.collection('users')
      .document(uid)
      .get()
      .then((e) => e.data['requests']);
}

但是,此代码解析为一个列表。

Future<List<String>> getRequests() {
  return Firestore.instance.collection('users')
      .document(uid)
      .get()
      .then((e) => [e.data['requests'][0]]);
}

我是否缺少一些“toList”功能?

【问题讨论】:

    标签: flutter google-cloud-firestore


    【解决方案1】:

    您的第二个代码示例通过用方括号将e.data['requests'][0] 包裹在一个新列表中。也许你的意思是写这个:

    .then((e) => e.data['requests'][0]);
    

    【讨论】:

    • 感谢您的回复。但是,“请求”字段是我想要的全部数组。我使用代码的第二个 sn-p 来表明它确实是一个数组,我可以检索它的第一个元素,然后通过将其括在括号中将其变成一个列表。
    • 你可以试试e.data['requests'] as List。它将它从 JSON 数组转换为 Dart List 对象。
    • 这是firestore你确定它还是一个json字符串吗?
    【解决方案2】:

    我发现的解决方案是非常明确的类型并转换为字符串。

    Future<List<String>> getRequests() {
      return userCollection.document(uid).get().then((e) {
        Map map = e.data;
        List<dynamic> list = map['requests'];
        // ignore: omit_local_variable_types
        List<String> newList = (list ?? []).map((e) => e.toString()).toList();
        return newList;
      });
    }
    

    感谢您的建议

    【讨论】:

      猜你喜欢
      • 2020-10-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-28
      相关资源
      最近更新 更多