错误状态:DocumentSnapshotPlatform 错误中不存在字段

时间:2021-07-20 11:16:49

标签: database firebase flutter dart

所以,我正在尝试构建一个小型应用程序,它会向您显示您添加到列表中的书籍。我试图从我的 Firebase 读取数据并将其显示在主页上,但我收到了这篇文章标题中的错误。

(不过,我可以轻松地将信息添加到数据库中)

这是我的代码:

body: StreamBuilder(

        stream: FirebaseFirestore.instance.collection('items').snapshots(),
        builder: (BuildContext context, AsyncSnapshot<QuerySnapshot> snapshot){

          if(!snapshot.hasData) return Text('No data');
          return ListView.builder(

            itemCount: snapshot.data!.docs.length,
            itemBuilder: (BuildContext context, int index){
              return Container(
                key: Key(snapshot.data!.docs[index].id),

                child: Container(
                  decoration: BoxDecoration(
                    borderRadius: BorderRadius.circular(10),
                  ),
                  child: Container(
                    padding: EdgeInsets.fromLTRB(20, 25, 0, 0),
                    child: Row(
                      children: [
                        Container(
                          width: 120,
                          height: 160,
                          decoration: BoxDecoration(
                            borderRadius: BorderRadius.circular(20),
                            image: DecorationImage(
                              image: NetworkImage(snapshot.data!.docs[index].get('url')),
                            ),
                          ),
                        ),

                        Expanded(
                          child: Column(
                            crossAxisAlignment: CrossAxisAlignment.start,
                            children: [
                              Text(snapshot.data!.docs[index].get('name'), style: TextStyle(
                                fontSize: 16,
                                fontFamily: "Avenir",
                                fontWeight: FontWeight.bold,
                              ),),

                              Text(snapshot.data!.docs[index].get('author')),

                              Row(
                                children: [
                                  Icon(Icons.star, size: 24, color: Colors.orangeAccent,),
                                  Text(snapshot.data!.doc[index].get('rating')),
                                ],
                              ),
                              Text(snapshot.data!.docs[index].get('category')),
                            ],
                          ),
                        ),
                      ],
                    ),
                  ),
                ),
              );
            },
          );
        },
      ),

1 个答案:

答案 0 :(得分:1)

您似乎在使用 cloud_firestore 2.0.0

来自migration guide

<块引用>

随着 withConverter 的发布,许多类/函数都采用了 额外的通用参数。在大多数情况下,类型推断应该采取 为您照顾迁移。但在某些情况下,您可能必须 自己指定通用参数。

您需要在 StreamBuilder 中包含 Map<String, dynamic>。像这样:

  StreamBuilder<QuerySnapshot<Map<String, dynamic>>>(
      stream: FirebaseFirestore.instance.collection('items').snapshots(),
      builder: (BuildContext context, AsyncSnapshot<QuerySnapshot<Map<String, dynamic>>> snapshot){
      ...
  }