【发布时间】:2020-11-09 00:19:51
【问题描述】:
我在这个问题上被困了好几个小时。
当 getCurrentUser 函数在同一个类 (SlateScreen) 中定义和调用时,我访问 final currentUser = loggedInUser.email; 没有问题。
我的 SlateScreen 类和 MessageStream 类都在同一个 .dart 文件中。所以这在这里有效:
final firestore = Firestore.instance;
/// loggedInUser variable for fetching the user email later
FirebaseUser loggedInUser;
DatabaseMethods databaseMethods = DatabaseMethods();
class TheSlateScreen extends StatefulWidget {
static String id = 'theslate_screen';
@override
_TheSlateScreenState createState() => _TheSlateScreenState();
}
class _TheSlateScreenState extends State<TheSlateScreen> {
final _auth = FirebaseAuth.instance;
// call getCurrentUser in initState
@override
void initState() {
super.initState();
getCurrenUser();
}
getCurrentUser() async {
try {
final user = await _auth.currentUser();
if (user != null) {
loggedInUser = user;
print(loggedInUser);
}
} catch (e) {
print(e);
}
}
class MessagesStream extends StatelessWidget {
@override
Widget build(BuildContext context) {
// fetch the email from my getCurrentUser function
final currentUser = loggedInUser.email;
但是如果我在 DatabaseMethods 类中定义我的 getCurrentUser() 函数,然后在 SlateScreen 类中调用它,则会收到“getter email was called on null”错误
@override
void initState() {
super.initState();
databaseMethods.getCurrentUser(_auth);
}
我的 DatabaseMethods 类:
class DatabaseMethods {
FirebaseUser loggedInUser;
getCurrentUser(FirebaseAuth _auth) async {
try {
final user = await _auth.currentUser();
if (user != null) {
loggedInUser = user;
}
} catch (e) {
print(e);
}
}
我尝试了各种调整,但没有成功...
更新/解决方案:
感谢提供的答案,我找到了一种方法:
在我的 DatabaseMethods 类中,我只返回用户:
Class DatabaseMethods {
getCurrentUser(FirebaseAuth _auth) async {
try {
final user = await _auth.currentUser();
if (user != null) {
return user;
}
} catch (e) {
print(e);
}
}
}
在 SlateScreen 类中,我使用了一个可以在 initState() 中调用的辅助函数:
@override
void initState() {
super.initState();
logInUser(_auth);
}
logInUser(_auth) async {
loggedInUser = await DatabaseMethods().getCurrentUser(_auth);
}
【问题讨论】:
-
MessagesStream是如何使用的? -
感谢您的回答。我在问题中更新了我的解决方案。又为我节省了几个小时的反复试验。
-
为什么
FirebaseAuth.instance.getUser()不可行?
标签: firebase flutter firebase-authentication