ListView & Snapshot - 错误 - 错误状态:DocumentSnapshotPlatform 中不存在字段

时间:2021-06-06 19:02:42

标签: firebase flutter listview google-cloud-firestore

我对快照和 ListView 有一个小问题。到目前为止,它运行良好。但是由于我更新了 flutter 和 Dart,我收到了一个错误。

<块引用>

在构建 StreamBuilder>(dirty, state: _StreamBuilderBaseState, AsyncSnapshot>>#8b4ae) 时抛出了以下 StateError: 错误状态:DocumentSnapshotPlatform 中不存在字段

我不明白如何解决这个问题。我检查了文档中字段的名称,没问题。 拜托,你能帮我理解这个吗?将不胜感激。谢谢

import 'package:flutter/material.dart';
import 'package:flutter/cupertino.dart';

import 'package:firebase_auth/firebase_auth.dart';
import 'package:cloud_firestore/cloud_firestore.dart';

class ProjectsList3 extends StatefulWidget {
  ProjectsList3 ({Key key}) : super(key : key);

  @override
  _ProjectsList3State createState() => _ProjectsList3State();
}

class _ProjectsList3State extends State<ProjectsList3> {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      drawer:  new MyMenu(),
      appBar: new AppBar(
        title: new Text('Projects'),
      ),
      body: Column(
        children: [
          Expanded(
            child: StreamBuilder<QuerySnapshot>(
                stream: FirebaseFirestore.instance
                    .collection('Users')
                    .doc(FirebaseAuth.instance.currentUser.uid)
                    .collection('projects')
                    .snapshots(),
                builder: (BuildContext context,
                    AsyncSnapshot<QuerySnapshot> snapshot) {
                  if(snapshot.connectionState == ConnectionState.waiting){
                    return Center(child: LinearProgressIndicator());
                  }
                  else{
                    return new ListView(
                      children: snapshot.data.docs.map((prgSnapshot){
                        return Card(
                            child: ListTile(
                              leading: CircleAvatar(

                              ),
                              title: Text(prgSnapshot['project_Name']),
                            )
                        ) ;
                      }).toList(),
                    );
                    //if (!snapshot.hasData) {
                    // return Center(
                    //   child: CircularProgressIndicator(),
                    // );
                  }
                }
            ),
          ),
        ],
      ),
      bottomNavigationBar: MyBottomAppBar(),
    );
    throw UnimplementedError();
  }
}

2 个答案:

答案 0 :(得分:1)

在这段代码中:

return new ListView(
  children: snapshot.data.docs.map((prgSnapshot){
    return Card(
        child: ListTile(
          leading: CircleAvatar(

          ),
          title: Text(prgSnapshot['project_Name']),
        )
    ) ;
  }).toList(),
);

snapshot.data 是一个 QuerySnapshot,这意味着 prgSnapshot 是一个 DocumentSnapshot。如果您查看该文档,您会发现它没有 [] 访问器。

如果您想从文档的数据中获取字段,请使用 prgSnapshot.data()['project_Name']prgSnapshot.get('project_Name')

答案 1 :(得分:0)

首先请尝试为ListView实现

if(snapshot.hasData)