我尝试将bindstream与GetX一起使用,但运行代码时出现错误:
类型“List”不是类型转换中类型“QuerySnapshot〈Object?〉”的子类型
这是我的控制器
final messages = <MessageModel>[].obs;
Stream <List<MessageModel>> list(ChatRoomModel chatRoomId) {
Stream<QuerySnapshot<Map<String, dynamic>>>? stream =
_fireStore
.collection('chatRooms')
.doc(chatRoomId.chatRoomId)
.collection('messages')
.orderBy('createdon', descending: true)
.snapshots();
return stream.map((qShot) => qShot.docs
.map((doc) => MessageModel.fromMap(doc.data()))
.toList());
}
@override
void onInit() {
messages.bindStream(list(ChatRoomModel()));
super.onInit();
}
主类
StreamBuilder(
stream: controller.list(chatRoom), //<-----
builder: (context, snapshot) {
if (snapshot.connectionState == ConnectionState.active) {
if (snapshot.hasData) {
QuerySnapshot dataSnapshot =
snapshot.data as QuerySnapshot;
return ListView.builder(
reverse: true,
itemCount: dataSnapshot.docs.length,
itemBuilder: (context, index) {
....
- 谢谢-谢谢
1条答案
按热度按时间nkoocmlb1#
您使用
Getx
的方式不对,Rx<T>
接口不能用于替代Flutter/Dart中的Stream
。Rx<T>
可观察性用于Obx()
小部件,以处理视图实现。BindStream
侦听Stream
并根据It.//右语句为Rx<T>
赋值Rx<T>
可观察值可以替换实际的Stream //错误句子。你有两个选择来处理你的情况:
第一个选项:
直接使用
StreamBuilder
和真实的Stream
,如下所示:第二个选项:
总结一下:
Stream
类型用于StreamBuilder
Rx<T>
类型在Obx
内部使用