flutter - 如何遍历集合中的所有文档以在 ListView 中显示内容?
问题描述
我的目标 我想遍历一个包含 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();
}
在屏幕截图中查看结果: 在此处输入图像描述
解决方案
如果要检索所有文档,则必须改为执行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);
}
推荐阅读
- javascript - javascript中的this()是什么?
- ruby-on-rails - 在模型对象上调用 .attributes 避免使用 nil 值的文件
- sapui5 - sap.m.table 上注入按钮的对齐方式
- css - 反应原生 ScrollView 项目在顶部和底部具有相等的填充
- laravel - Vuetify.js - IE11 不显示带有 babel-polyfill 的数据表
- mysql - 无法在 OS-X High Sierra (10.13.6) PID 文件上启动 MySql (8.0.15)
- c#-4.0 - DataTable 到 Generic List 使用 Task 使其更快
- python - 使用批处理文件运行 Django 项目后,Chrome 无法打开
- typescript - 将联合类型与不接受参数作为对象的函数一起使用
- react-native - 文本输入最小长度反应原生