Flatter应用程序中未更新Firebase数据库
我正在开发一个聊天应用程序。我已经完成了安装firebase的所有过程,我的应用程序运行良好。但是当我连接firebase数据库并试图将消息存储到数据库中时。数据库不会使用新文档(消息和用户电子邮件)更新 这是我的密码- 这就是我的firebase数据库页面的外观 这就是我的应用程序的样子Flatter应用程序中未更新Firebase数据库,firebase,flutter,dart,google-cloud-firestore,Firebase,Flutter,Dart,Google Cloud Firestore,我正在开发一个聊天应用程序。我已经完成了安装firebase的所有过程,我的应用程序运行良好。但是当我连接firebase数据库并试图将消息存储到数据库中时。数据库不会使用新文档(消息和用户电子邮件)更新 这是我的密码- 这就是我的firebase数据库页面的外观 这就是我的应用程序的样子 导入“包装:颤振/材料.省道”; 导入“package:flash_chat/constants.dart”; 导入“包:firebase_auth/firebase_auth.dart”; 导入“包:c
导入“包装:颤振/材料.省道”;
导入“package:flash_chat/constants.dart”;
导入“包:firebase_auth/firebase_auth.dart”;
导入“包:cloud_firestore/cloud_firestore.dart”;
类ChatScreen扩展StatefulWidget{
静态常量字符串id='chat_screen';
@覆盖_chatScreenStatecreateState()=>_ChatScreenState();
}
类_ChatScreenState扩展状态{
final _firestore=firestore.instance;
字符串消息文本;
final _auth=FirebaseAuth.instance;
FirebaseUser日志用户;
void getCurrentUser()异步{
试一试{
最终用户=等待_auth.currentUser();
如果(用户!=null){
loggedinUser=用户;
打印(用户邮箱);
}
}捕获(e){
印刷品(e);
}
}
@覆盖小部件构建(构建上下文){
返回脚手架(
appBar:appBar(
前导:空,
行动:[
图标按钮(
图标:图标(Icons.close),
已按下:(){
_auth.signOut();
Navigator.pop(上下文);
//实现注销功能
}),
],
标题:文本('⚡️聊天室),,
背景颜色:Colors.lightBlueAccent,
),
正文:安全区(
子:列(
mainAxisAlignment:mainAxisAlignment.spaceBetween,
crossAxisAlignment:crossAxisAlignment.stretch,
儿童:[
容器(
装饰:kMessageContainerDecoration,
孩子:排(
crossAxisAlignment:crossAxisAlignment.center,
儿童:[
扩大(
孩子:TextField(
一旦更改:(值){
messageText=值;
//对用户输入执行一些操作。
},
装饰:KMessageExtField装饰,
),
),
扁平按钮(
已按下:(){
_firestore.collection('messages')。添加({
“发件人”:loggedinUser.email,
“文本”:messageText,
});
//实现发送功能。
},
子:文本(
“发送”,
样式:ksendButtonExtStyle,
),
),
],
),
),
],
),
),
);
}
}
**问题似乎是您试图添加带有
null
值的数据,这就是为什么您看不到任何更改
似乎为
null
的值是loggedinUser.email
和messageText
,检查用户是否有email
,对于messageText
,在onChanged
中,您应该执行messageText=value
在setState()
中,但您可以将控制器添加到TextField
中,然后使用controller。text
您有足够的权限吗?您是否看到任何错误消息?是的,我拥有所有权限,但没有看到任何错误图像。
import 'package:flutter/material.dart';
import 'package:flash_chat/constants.dart';
import 'package:firebase_auth/firebase_auth.dart';
import 'package:cloud_firestore/cloud_firestore.dart';
class ChatScreen extends StatefulWidget {
static const String id = 'chat_screen';
@override _ChatScreenState createState() => _ChatScreenState();
}
class _ChatScreenState extends State<ChatScreen> {
final _firestore = Firestore.instance;
String messageText;
final _auth = FirebaseAuth.instance;
FirebaseUser loggedinUser;
void getCurrentUser() async {
try {
final user = await _auth.currentUser();
if (user != null) {
loggedinUser = user;
print(user.email);
}
} catch (e) {
print(e);
}
}
@override Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
leading: null,
actions: <Widget>[
IconButton(
icon: Icon(Icons.close),
onPressed: () {
_auth.signOut();
Navigator.pop(context);
//Implement logout functionality
}),
],
title: Text('⚡️Chat'),
backgroundColor: Colors.lightBlueAccent,
),
body: SafeArea(
child: Column(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
crossAxisAlignment: CrossAxisAlignment.stretch,
children: <Widget>[
Container(
decoration: kMessageContainerDecoration,
child: Row(
crossAxisAlignment: CrossAxisAlignment.center,
children: <Widget>[
Expanded(
child: TextField(
onChanged: (value) {
messageText = value;
//Do something with the user input.
},
decoration: kMessageTextFieldDecoration,
),
),
FlatButton(
onPressed: () {
_firestore.collection('messages').add({
'sender': loggedinUser.email,
'text': messageText,
});
//Implement send functionality.
},
child: Text(
'Send',
style: kSendButtonTextStyle,
),
),
],
),
),
],
),
),
);
}
}