如何使用 StreamBuilder 从多个文档中获取数据?
How do I get data from multiple documents with StreamBuilder?
我正在尝试使用 chat 制作我的 Flutter 应用。
我使用 streambuilder 来更新聊天数据。
我的问题是我不知道如何使用 streambuilder.读取多个文档。
这是我的数据库:
我的计划是从该文档中获取所有数据。
之前,我 将 id 存储在对象中 并且我使用 for 循环 从文档 .
中获取所有数据
这些文档可以是 随机计数 (2 或 10...)。
这是我的 streambuilder:
body() {
//build stream link get id
Stream _build_stream_id() async* {
//load user
var user_id = await StorageUserID.loadData();
yield* FirebaseFirestore.instance
.collection('chat')
.doc('users')
.collection(user_id)
.snapshots();
}
//build stream link get data
Stream _build_stream_data(chat_overview_object, index) async* {
yield* FirebaseFirestore.instance
.collection('chat')
.doc('chat_overview_data')
.collection('data')
.doc(chat_overview_object[index].chat_overview_id[0])
.snapshots();
}
return StreamBuilder(
stream: _build_stream_id(),
builder: (context, snapshot) {
if (snapshot.hasData) {
var chat_overview_object = query_chat_overview_data_1(snapshot.data);
for (var i = 0; i < chat_overview_object.length; i++) {
return StreamBuilder(
stream: _build_stream_data(chat_overview_object, i),
builder: (context, snapshot) {
if (snapshot.hasData) {
return Text('test: ' + snapshot.data.toString());
} else {
return Text("No data");
}
},
);
}
} else {
return Text("No data");
}
return Text('data');
},
);
}
如果你找到更好的方法请告诉我。
如果您有任何问题,请随时问我。
非常感谢 (:
您可以使用异步包中的 StreamGroup 组合流。
import 'package:async/async.dart' show StreamGroup;
List<Stream> streamList = [stream1, stream2];
Stream combinedStream = StreamGroup.merge(streamList);
尽管处理具有不同字段的 Firestore 集合可能很棘手。
我正在尝试使用 chat 制作我的 Flutter 应用。
我使用 streambuilder 来更新聊天数据。
我的问题是我不知道如何使用 streambuilder.读取多个文档。
这是我的数据库:
我的计划是从该文档中获取所有数据。
之前,我 将 id 存储在对象中 并且我使用 for 循环 从文档 .
中获取所有数据
这些文档可以是 随机计数 (2 或 10...)。
这是我的 streambuilder:
body() {
//build stream link get id
Stream _build_stream_id() async* {
//load user
var user_id = await StorageUserID.loadData();
yield* FirebaseFirestore.instance
.collection('chat')
.doc('users')
.collection(user_id)
.snapshots();
}
//build stream link get data
Stream _build_stream_data(chat_overview_object, index) async* {
yield* FirebaseFirestore.instance
.collection('chat')
.doc('chat_overview_data')
.collection('data')
.doc(chat_overview_object[index].chat_overview_id[0])
.snapshots();
}
return StreamBuilder(
stream: _build_stream_id(),
builder: (context, snapshot) {
if (snapshot.hasData) {
var chat_overview_object = query_chat_overview_data_1(snapshot.data);
for (var i = 0; i < chat_overview_object.length; i++) {
return StreamBuilder(
stream: _build_stream_data(chat_overview_object, i),
builder: (context, snapshot) {
if (snapshot.hasData) {
return Text('test: ' + snapshot.data.toString());
} else {
return Text("No data");
}
},
);
}
} else {
return Text("No data");
}
return Text('data');
},
);
}
如果你找到更好的方法请告诉我。
如果您有任何问题,请随时问我。
非常感谢 (:
您可以使用异步包中的 StreamGroup 组合流。
import 'package:async/async.dart' show StreamGroup;
List<Stream> streamList = [stream1, stream2];
Stream combinedStream = StreamGroup.merge(streamList);
尽管处理具有不同字段的 Firestore 集合可能很棘手。