首页 > 解决方案 > 从 Firestore 获取集合,.map 不起作用(颤振)

问题描述

我正在为我的应用程序使用 Flutter 和 firebase。

我通过将所有代码放在 main 中来启动我的应用程序。飞镖我现在想很好地组织我的文件,但我遇到了一个问题。

我创建了一个带有数据库的服务文件夹。dart 文件,我在其中创建了一个类以在 firestorm 中查找我的项目

问题是我没有传入快照。docs.map ((doc))

这是我在数据库中的代码。镖

import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:flutterfirebase/models/todo_model.dart';

class DatabaseService {
  DatabaseService();

  final CollectionReference itemsCollection =
      FirebaseFirestore.instance.collection("items");

  Stream<List<TodoItem>> get todos {
    return itemsCollection.snapshots().map((QuerySnapshot snapshot) {
      inspect(snapshot.docs);
      return snapshot.docs.map((DocumentSnapshot doc) {
        print('here');
        inspect(doc);
        return TodoItem(text: doc.data()['text'], done: doc.data()['done']);
      });
    });
  }
}

print(snapshot.docs.length); 返回 4. inspect(snapshot.docs) 作品,我可以看到我的 4 queryDocumentSnapshot 和我的id

print('here') 没有出现,也没有 inspect(doc)

你能帮我弄清楚发生了什么吗?

这是软件包的版本

firebase_core:^1.0.2

cloud_firestore:^1.0.3

谢谢

标签: firebasefluttergoogle-cloud-firestore

解决方案


我认为你应该从流中返回 QuerySnapshot 而不是 DocumentSnapshot,就像这样

Stream<List<TodoItem>> getSomeoneItems() {
  return FirebaseFirestore.instance.collection('items')
    .snapshots()
    .map((qSnap) =>
        qSnap.docs.map((doc) => TodoItem.fromJson(doc.data())).toList());
}

然后您可以在 StreamBuilder 小部件内的视图中使用此流。


推荐阅读