【发布时间】:2020-08-25 09:34:05
【问题描述】:
Flutter 显示我的 loggedInUser 为空/无效。但是我在 getCurrentUser() 方法中保存了用户的值。现在正因为如此,我的代码在第 92 行出现异常(该行后面是注释)。例外是 -
在处理手势时引发以下 NoSuchMethodError: 在 null 上调用了 getter 'email'。 接收方:空 尝试呼叫:电子邮件
//但是每当我使用_auth.currentUser.email 代替loggedInUser 时,我的代码运行良好。我不明白为什么??
请有人帮帮我,我是新手。
这是我的聊天屏幕代码 -
import 'package:firebase_core/firebase_core.dart';
import 'package:flutter/material.dart';
import 'package:palabrero_chat_app/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 myController = TextEditingController();
@override
void dispose() {
myController.dispose();
super.dispose();
}
// ignore: deprecated_member_use
final _firestore = Firestore.instance;
final _auth = FirebaseAuth.instance;
FirebaseUser loggedInUser;
String messageText;
@override
void initState() {
super.initState();
Firebase.initializeApp().whenComplete(() {
print("completed");
setState(() {});
});
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(
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;
},
decoration: kMessageTextFieldDecoration,
),
),
FlatButton(
onPressed: () {
getCurrentUser();
//messageText + loggedInUser.email
_firestore.collection('messages').add({
'text' : messageText,
'sender' : loggedInUser.email, //This line no. 92
//If i use _auth.currentUser.email above, in place of loggedInUser, my code
works. Please explain it to me.
});
},
child: Text(
'Send',
style: kSendButtonTextStyle,
),
),
],
),
),
],
),
),
);
}
}
【问题讨论】:
-
您使用的是哪个版本的 firebase_auth?
-
@PeterHaddad 0.18.0+1
标签: firebase flutter google-cloud-firestore