在 Flutter 中从 Firebase 检索用户电子邮件
Posted
技术标签:
【中文标题】在 Flutter 中从 Firebase 检索用户电子邮件【英文标题】:Retrieving user email from Firebase in Flutter 【发布时间】:2020-12-11 00:04:15 【问题描述】:在我处理登录、登录、注销身份验证的 AuthProvider 类中,我创建了 2 个返回未来字符串的函数,如下所示
Future<String> currentUser() async
FirebaseUser user = await _auth.currentUser();
return user.uid;
Future<String> getCurrentUserEmail() async
FirebaseUser user = await _auth.currentUser();
final String email = user.email.toString();
// print(email);
return email;
在我的菜单屏幕中,我想在文本字段中显示我当前登录的用户电子邮件,我将其称为如下。
UserAccountsDrawerHeader(
accountName: Text('Brad Pitt'),
accountEmail: Text(
'$AuthProvider.of(context).auth.getCurrentUserEmail()'),
我曾尝试同时使用 currenUser() 和 getCurrentUserEmail() 来尝试显示已登录用户的电子邮件,但我一直显示“未来实例”。
我在这里忽略了什么?我已经尝试了所有我能想到的方法。
谢谢。
【问题讨论】:
【参考方案1】:由于您的getCurrentUserEmail
返回一个Future
,您需要use a FutureBuilder
才能在您的构建方法中使用它。
accountEmail: FutureBuilder<String>(
future: AuthProvider.of(context).auth.getCurrentUserEmail(),
builder: (BuildContext context, AsyncSnapshot<String> snapshot)
if (snapshot.hasData)
return Text(snapshot.data)
else
return Text("Loading user data...")
)
【讨论】:
这也不能解决我的问题。我得到了红色和黄色的涂鸦线。错误消息显示:A build function returned Bull.The 有问题的小部件是:FutureBuilderFutureBuilder
的文档的链接。我强烈建议您了解这一点(它是什么、为什么需要它、它是如何工作的),这样您就可以自己解决后续问题。【参考方案2】:
最好升级到firebase_auth:0.18.0
,升级后可以同步得到currentUser
!
dependencies:
flutter:
sdk: flutter
firebase_core : ^0.5.0
firebase_auth : ^0.18.0
初始化 Firebase:
void main() async
WidgetsFlutterBinding.ensureInitialized();
await Firebase.initializeApp();
runApp(MyApp());
然后在UsersAccountDrawerHeader
:
UserAccountsDrawerHeader(
accountName: Text('Brad Pitt'),
accountEmail: Text('$auth.instance.currentUser.email'),
同时检查:
Undefined class 'FirebaseUser'
No Firebase App '[DEFAULT]' has been created - call Firebase.initializeApp() in Flutter and Firebase
【讨论】:
谢谢。当前的依赖版本是 firebase_core: ^0.4.5 firebase_auth: ^0.16.1 cloud_firestore: ^0.13.7 根据您的建议,哪个版本的 Cloud Firestore 可以与上述 firebase_auth 和 firebase_core 更新兼容? 0.14.0 和核心 0.5.0 如答案,auth 0.18.0 检查***.com/questions/63473865/… 谢谢!我很感激。看来我必须对这些新更新进行应用范围内的更改。【参考方案3】:你需要在函数前面加上~await~,因为它是一个返回~Future~的函数
await AuthProvider.of(context).auth.getCurrentUserEmail()
【讨论】:
我不能在我的构建方法中调用它。它会抛出一个错误并迫使我将我的默认构建函数声明为 Future 并向其添加异步。【参考方案4】:检索用户电子邮件,支持空值安全。
var currentUser = FirebaseAuth.instance.currentUser;
Text('admin email: $FirebaseAuth.instance.currentUser!.email'),
【讨论】:
以上是关于在 Flutter 中从 Firebase 检索用户电子邮件的主要内容,如果未能解决你的问题,请参考以下文章
在 Flutter 中从 Firebase 实时数据库读取和存储数据
Flutter Firebase异步查询未在流函数中检索数据
在 Flutter 中从 Firebase 读取数组 [重复]