gpt4 book ai didi

firebase - 在 null 上调用了 getter 'email'

转载 作者:行者123 更新时间:2023-12-03 03:37:11 25 4
gpt4 key购买 nike

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

The getter 'email' was called on null. Receiver: null Tried calling: email



而且 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”的集合,其中文档名称是用户创建帐户时使用的电子邮件。

所有注册/登录过程似乎都运行良好。

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

最佳答案

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

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

并通过 setState() 设置它
setState(() {
username = snapshot.data['username'];
});

另一个解决方案是改变
String username;


String username = '';

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

关于firebase - 在 null 上调用了 getter 'email',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60054950/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com