【问题标题】:How do I iterate through all documents in collection to show content in ListView?如何遍历集合中的所有文档以在 ListView 中显示内容?
【发布时间】:2020-11-08 16:47:24
【问题描述】:

我的目标 我想遍历一个包含 1…n 个文档的集合。我想把文档的内容放在 ListView 中。集合代表ListView,每个文档应该是一个ListTile。

我的 Firestore 数据 我有一个 Firestore 数据库,其中包含一个名为“current_question”的集合,其中包含多个文档。每个文档都包含一个问题的详细信息:标题、描述、日期等。

我目前的表现 我知道如何显示一份文件的数据。我不知道的是,如何加载所有文档并发布它们。

加载一个文档的代码:

body: FutureBuilder(
          future: connectToFirebase(),
          builder: (BuildContext context, AsyncSnapshot<void> snapshot) {
            if (snapshot.connectionState == ConnectionState.waiting) {
              return Center(child: CircularProgressIndicator());
            } else {
              return StreamBuilder<DocumentSnapshot>(
                stream: database.getQuestions(),
                builder: (BuildContext context, AsyncSnapshot<DocumentSnapshot> snapshot) {
                  if (!snapshot.hasData) {
                    return Center(child: CircularProgressIndicator());
                  } else {
                    Map<String, dynamic> items = snapshot.data.data;
                    print(items);
                    return ListView.builder(
                        itemCount: 1,
                        itemBuilder: (context, i) {
                          return ListTile(
                            title: Text(items['Titel'].toString()),
                            trailing: Text(items['Zaehler'].toString()),
                          );
                        }
                    );
                  }
                },
              );
            }
          }),
Future<void> connectToFirebase() async {
    final FirebaseAuth auth = FirebaseAuth.instance;
    AuthResult result = await auth.signInAnonymously();
    user = result.user;

    database = DatabaseService();
  }
final CollectionReference aktFragen = Firestore.instance.collection('aktFragen')/*.orderBy('Zaehler')*/;

  Stream getQuestions() {
    return aktFragen.document('xAGRoZCgiClrpeAPtb5B').snapshots();
  }

查看截图中的结果: enter image description here

【问题讨论】:

    标签: flutter dart google-cloud-firestore


    【解决方案1】:

    如果您想检索所有文档,则必须改为执行 QuerySnapshot。这是一种方法:

    // Creating an instance of your model with all the users info 
      List<CustomModelNameHere> _myListSnapshot(QuerySnapshot snapshot) {
        return snapshot.documents.map((doc) {
          return CustomModelNameHere(
            title: doc.data["title"] ?? "",
            description: doc.data["description"] ?? "",
          );
        }).toList();
      }
    
     // Get the stream
      Stream<List<CustomModelNameHere>> get getQuestions {
        return aktFragen.snapshots()
          .map(_myListSnapshot);
      }
    

    【讨论】:

    • 谢谢! “CustomModel”是什么意思?
    • 这是您声明将要使用的属性的地方,例如您的时间戳和标题。
    【解决方案2】:

    @Unbreachable 的回答很好!

    我是这样实现的:

      @override
      Widget build(BuildContext context) {
        return new StreamBuilder<QuerySnapshot>(
          stream: Firestore.instance.collection('currentQuestions').snapshots(),
          builder: (BuildContext context, AsyncSnapshot<QuerySnapshot> snapshot) {
            if (!snapshot.hasData) {
              return Center(child: CircularProgressIndicator());
            } else {
              return new ListView(
                children: snapshot.data.documents.map((document) {
                  return new ListTile(
                    title: new Text(document['title'].toString()),
                    subtitle: new Text(document['count'].toString())
                  );
                }).toList()
              );
            }
          }
        );
      }
    

    我还为这个主题找到了一个很好的 YouTube 教程:

    https://www.youtube.com/watch?v=Ak_6_pBBe3U&feature=youtu.be

    【讨论】:

      猜你喜欢
      • 2017-04-15
      • 1970-01-01
      • 1970-01-01
      • 2014-09-19
      • 2018-07-07
      • 1970-01-01
      • 2018-11-26
      • 2016-12-24
      • 2021-08-26
      相关资源
      最近更新 更多