【发布时间】: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