获取者"电子邮件"在空时被调用



我正在尝试使用 Flutter 和 Firebase 在两个人之间进行聊天,但是当我使用 Firebase 的 signInWithEmailAndPassword 连接到我的应用程序时遇到错误,它告诉我:

获取器"电子邮件"在空时被调用。接收器:空 已尝试呼叫: 电子邮件

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 数据库有一个名为"users"的集合,其中的文档名称是用户在创建帐户时使用的电子邮件。

所有注册/登录过程似乎都可以正常工作。

如果有人知道正在发生的事情,那就太棒了,谢谢。

将用户名初始化为 null。您可以在小部件树上检查它

username != null ? Text(
'Welcome $username',
style: TextStyle(
fontFamily: 'Amatic',
fontSize: SizeConfig.safeBlockHorizontal * 10),
) : CircularProgressIndicator()

并通过setState()进行设置

setState(() {
username = snapshot.data['username'];
});

另一种解决方案是改变

String username;

String username = '';

顺便说一下,您应该使用状态管理方法。setState()是非常原始的,如果您将其用作状态管理解决方案,您最终将拥有 sphagetti 代码。

相关内容

最新更新