错误:没有为类"对象"定义 getter 'docs'。- "对象"来自"飞镖:核心"



我在从Firebase Cloud Firestore获取消息时遇到问题。显示的错误为:'Error: The getter 'docs' isn't defined for the class 'Object' - 'Object' is from 'dart:core'.'

以下是我的代码:

class ChatScreen extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
body: StreamBuilder<Object>(
stream: FirebaseFirestore.instance
.collection('chats/EKLJIb8ZfRoDTqxkkJaB/messages')
.snapshots(),
builder: (context, chatSnapshot) {
return ListView.builder(
itemCount: chatSnapshot.data.**docs**.length,
itemBuilder: (ctx, index) => Container(
padding: EdgeInsets.all(8),
child: Text('this work'),
),
);
}),
floatingActionButton: FloatingActionButton(
child: Icon(Icons.add),
onPressed: null,
),
);
}
}

更改此项:

body: StreamBuilder<Object>(

进入这个:

body: StreamBuilder<QuerySnapshot>(

docs是类QuerySnapshot下的属性,而不是类Object下的属性。


您必须指定stream返回的类型。因此,如果您有一个Stream<QuerySnapshot>类型的stream,那么您可以将该类型作为参数添加到StreamBuilder中,正如您在上面的代码中看到的那样。

在新的cloud_firestore包中,snapshots()方法返回Stream<QuerySnapshot<Map<String, dynamic>>>,因此您可以执行以下操作:

body: StreamBuilder<QuerySnapshot<Map<String, dynamic>>>(

添加dynamic可能会解决这个问题,但最好添加正在返回的类型,因为这样编辑器或IDE将为您提供代码完成。

我已经解决了这个问题,在StreamBuilder之后添加了动态数据类型,在我的情况下,答案是"彼得·哈达德";对我不起作用,我也犯了同样的错误。

我就是这样解决的:

StreamBuilder<dynamic>(....Your Code here....)

最新更新