【发布时间】:2020-05-20 03:17:33
【问题描述】:
我正在尝试使用 Flutter 和 Firebase 在两个人之间进行聊天,但是当我使用 Firebase 的 signInWithEmailAndPassword 连接到我的应用时遇到错误,它告诉我:
getter 'email' 在 null 上被调用。接收者:null 尝试调用: 电子邮件
Flutter 还告诉我错误来自 main.dart 中的 MaterialApp 小部件,这无助于我找到错误..
import 'package:flutter/material.dart';
import 'package:firebase_auth/firebase_auth.dart';
import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:social/responsive/size_config.dart';
import 'settings.dart';
import 'home.dart';
final _firestore = Firestore.instance;
FirebaseUser loggedInUser;
class ActivityFeed extends StatefulWidget {
static const String id = 'activity_feed_screen';
@override
_ActivityFeedState createState() => _ActivityFeedState();
}
class _ActivityFeedState extends State<ActivityFeed> {
final _auth = FirebaseAuth.instance;
@override
void initState() {
super.initState();
getCurrentUser();
}
void getCurrentUser() async {
try {
final user = await _auth.currentUser();
if (user != null) {
loggedInUser = user;
}
} catch (e) {
print(e);
}
}
@override
Widget build(BuildContext context) {
return Scaffold(
body: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Expanded(
child: Container(
color: Colors.red,
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
crossAxisAlignment: CrossAxisAlignment.center,
children: <Widget>[
UserInfo(),
FlatButton(
child: Icon(
Icons.settings,
color: Colors.white,
),
onPressed: () {
Navigator.pushNamed(context, Settings.id);
},
),
FlatButton(
child: Icon(
Icons.not_interested,
color: Colors.white,
),
onPressed: () {
_auth.signOut();
Navigator.pushNamed(context, Home.id);
},
),
],
),
),
)
],
),
);
}
}
class UserInfo extends StatefulWidget {
@override
_UserInfoState createState() => _UserInfoState();
}
class _UserInfoState extends State<UserInfo> {
String email = loggedInUser.email;
String username;
@override
void initState() {
super.initState();
getUsername();
}
void getUsername() async {
DocumentReference docRef = _firestore.collection('users').document(email);
docRef.get().then((snapshot) {
if (snapshot.exists) {
username = snapshot.data['username'];
}
});
}
@override
Widget build(BuildContext context) {
SizeConfig().init(context);
return Column(
children: <Widget>[
Text(
'Welcome $username',
style: TextStyle(
fontFamily: 'Amatic',
fontSize: SizeConfig.safeBlockHorizontal * 10),
),
],
)
;
}
}
所以基本上我只是想显示“欢迎”+用户名,但它不想要, 我的 Firebase 数据库有一个名为“用户”的集合,其中文档名称是用户创建帐户时使用的电子邮件。
所有注册/登录过程似乎都可以正常工作。
如果有人知道正在发生的事情,那就太好了,谢谢。
【问题讨论】:
-
你的文档密钥是你的
email,你能告诉我们你的firestore结构吗? -
@Blasanka 谢谢你的回答,我为你做了一个屏幕imgur.com/GPQzAIo
标签: firebase flutter dart firebase-authentication