【问题标题】:flutter Bad state: field does not exist within the DocumentSnapshotPlatform颤振不良状态:DocumentSnapshotPlatform中不存在字段
【发布时间】:2021-10-19 00:18:11
【问题描述】:

当我构建我的应用程序并注册一个新用户并转到聊天屏幕时,我遇到了这个异常:小部件库捕获的异常 以下 StateError 被抛出构建: 错误状态:DocumentSnapshotPlatform 中不存在字段 那我该怎么办? 这是新的消息文件:

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

class NewMessages extends StatefulWidget {
 @override
 NewMessagesState createState() => NewMessagesState();
}

class NewMessagesState extends State<NewMessages> {
 final controller = TextEditingController();
 String enteredmessage = '';

 sendmessage() async {
   FocusScope.of(context).unfocus();
   final user = FirebaseAuth.instance.currentUser;
   final userdata = await FirebaseFirestore.instance
       .collection('users')
       .doc(user!.uid)
       .get();
   FirebaseFirestore.instance.collection('chat').add({
     'text': enteredmessage,
     'created at': Timestamp.now(),
     'username': userdata['username'],
     'userid': user.uid,
   });
   controller.clear();
 }

 @override
 Widget build(BuildContext context) {
   return Container(
       margin: EdgeInsets.only(top: 8),
       padding: EdgeInsets.all(8),
       child: Row(
         children: [
           Expanded(
               child: TextField(
             controller: controller,
             decoration: InputDecoration(labelText: "send a message..."),
             onChanged: (val) {
               setState(() {
                 enteredmessage = val;
               });
             },
           )),
           IconButton(
               color: Theme.of(context).primaryColor,
               onPressed: 
                   enteredmessage.trim().isEmpty ? null : sendmessage,
               icon: Icon(Icons.send))
         ],
       ));
 }
}


这是消息文件:

import 'package:app1/chat/message_bubble.dart';
import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:firebase_auth/firebase_auth.dart';
import 'package:flutter/material.dart';

class Messages extends StatelessWidget {
 @override
 Widget build(BuildContext context) {
   return StreamBuilder<QuerySnapshot>(
     stream: FirebaseFirestore.instance
         .collection('chat')
         .orderBy('created at', descending: true)
         .snapshots(),
     builder: (ctx, snapShot) {
       if (snapShot.connectionState == ConnectionState.waiting) {
         return CircularProgressIndicator();
       }

       final docs = snapShot.data!.docs;
       final user = FirebaseAuth.instance.currentUser;
       return ListView.builder(
         reverse: true,
         itemCount: docs.length,
         itemBuilder: (ctx, index) => Message_bubble(
           docs[index]['text'],
           docs[index]['username'],
           docs[index]['userid'] == user!.uid,
           ValueKey(docs[index]['userid']),
         ),
       );
     },
   );
 }
}


这就是消息气泡文件:


import 'package:app1/chat/message_bubble.dart';
import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:firebase_auth/firebase_auth.dart';
import 'package:flutter/material.dart';

class Messages extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return StreamBuilder<QuerySnapshot>(
      stream: FirebaseFirestore.instance
          .collection('chat')
          .orderBy('created at', descending: true)
          .snapshots(),
      builder: (ctx, snapShot) {
        if (snapShot.connectionState == ConnectionState.waiting) {
          return CircularProgressIndicator();
        }

        final docs = snapShot.data!.docs;
        final user = FirebaseAuth.instance.currentUser;
        return ListView.builder(
          reverse: true,
          itemCount: docs.length,
          itemBuilder: (ctx, index) => Message_bubble(
            docs[index]['text'],
            docs[index]['username'],
            docs[index]['userid'] == user!.uid,
            ValueKey(docs[index]['userid']),
          ),
        );
      },
    );
  }
}

【问题讨论】:

  • 文档是否存在?您可以在 add() 语句之前尝试 print(userdata.exists) 吗?
  • 它确实存在,它正在云 Firestore 中制作文档,我可以在那里看到它,但用户名为空,并且在应用程序中它没有发送
  • 只是确认一下,你能print(userdata.data())并分享输出吗?
  • 小部件库捕获的异常以下状态错误被抛出构建:错误状态:DocumentSnapshotPlatform中不存在字段

标签: firebase flutter dart google-cloud-firestore


【解决方案1】:

我觉得要访问文档的字段,现在需要通过data()来访问,所以:

userdata.data()['username']

【讨论】:

  • 现在我得到一个新的错误:以下 _TypeError was throwed building: type 'Null' is not a subtype of type 'String'
  • 如果有帮助,我添加了另一个文件。谢谢
猜你喜欢
  • 2021-08-04
  • 2022-06-11
  • 2021-05-16
  • 2022-09-27
  • 2021-08-21
  • 1970-01-01
  • 2021-09-28
  • 2021-09-27
  • 1970-01-01
相关资源
最近更新 更多