gpt4 book ai didi

firebase - 登录/注册后获取和存储用户数据

转载 作者:IT王子 更新时间:2023-10-29 06:34:23 25 4
gpt4 key购买 nike

我想在用户登录后从 firestore 加载用户配置文件信息,并且我希望在数据登录时该数据可供整个应用程序使用。我计划在 flutter 中使用继承的小部件来完成后面的部分。我可以正确地从 firestore 加载数据并获取所有数据,但主页在继续之前不会等待数据加载,所以我收到错误。它调用方法,然后忽略方法中的 await 部分并继续,所以我得到错误,然后在错误之后,我得到数据已加载的数据消息。

我已经尝试了一些东西。我将所有用户管理代码(登录、注册等)都放在一个文件中,并在该文件中编写了一个 getuserProfie() 方法。该方法获取所有数据,用数据填充用户模型并返回该模型。请参阅下面的代码。

 getUserProfile() async {
UserModel theUser;
await FirebaseAuth.instance.currentUser().then((user) {
Firestore.instance
.collection('/users')
.where('uid', isEqualTo: user.uid)
.snapshots()
.listen((data) {
print('getting data');
theUser = new UserModel(user.uid, data.documents[0]['email'],);

print('got data');
print(theUser.email);
return theUser;
});
}).catchError((e) {
print("there was an error");
print(e);
});
}

然后我在我的主页调用这个方法如下

      @override
void initState() {
Usermode user = UserManagement().getUserProfile(); //Calling the method
super.initState();
}

这会很好地调用该方法并获取所有数据,但程序不会等到获取数据后再继续。我尝试将获取数据的代码移动到 initState() 方法中并调用 super.initState() 当我确定有一个值但不起作用时。我还尝试在调用 super.initstate() 之前调用 getUserProfile() 但这没有用。

我尝试将异步添加到 initState() header ,但 flutter 不喜欢那样。我可以很好地从 firebase 获取数据,但是让程序等待直到获取数据是我遇到的问题。似乎使用 await 和 async 不起作用。在继续之前确保数据已加载的任何其他建议?我考虑过使用 FutureBuilder 但我不确定在这种情况下它会如何工作。

最佳答案

initState() 不能是 async 函数。

您可以尝试的是 - 将 Usermode user = await UserManagement().getUserProfile(); 移动到新的 async 函数。

Usermode user;

@override
void initState() {
super.initState();
_getUser();

}

Void _getUser() async {
user = await UserManagement().getUserProfile();
setState(() {});
}

在构建方法中,您可以检查用户值,然后传递小部件。

@override
Widget build(BuildContext context) {
if (user != null) {
return ProfilePage();
} else {
return CircularProgressIndicator();
}

现在,无论何时加载用户数据,它都会调用 setState() 并加载您的个人资料页面。

为此,您需要创建 - Usermode user; 状态变量。

关于firebase - 登录/注册后获取和存储用户数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54057533/

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