错误:没有为类“Object”定义 getter“docs”。-“对象”来自“dart:核心”

Mba*_*pel 2 firebase flutter google-cloud-firestore

我在从 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,
          ),
      );
   }
}
Run Code Online (Sandbox Code Playgroud)

Pet*_*dad 6

改变这个:

body: StreamBuilder<Object>(
Run Code Online (Sandbox Code Playgroud)

进入这个:

body: StreamBuilder<QuerySnapshot>(
Run Code Online (Sandbox Code Playgroud)

docs是 class 下的属性QuerySnapshot,而不是 class 下的属性Object


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

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

body: StreamBuilder<Object>(
Run Code Online (Sandbox Code Playgroud)

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