gpt4 book ai didi

firebase - flutter/FirebaseAuth : How can I autologin a user at app launch?

转载 作者:IT王子 更新时间:2023-10-29 07:13:59 24 4
gpt4 key购买 nike

我有以下方法来查看用户是否已经登录,在这种情况下我确实登录了并且 getCurrentUser() 函数起作用,因为在控制台中它确实返回“USER IS NOT NULL”,但 home 小部件仍然为 null,给我“WIDGETS LIBRARY 捕获的异常”,表示 home 不能为 null 之类的东西。

用户API.dart

Future<FirebaseUser> getCurrentUser() async {
FirebaseUser user = await FirebaseAuth.instance.currentUser();

if (user != null) {
return user;
} else {
return null;
}
}

主.dart

class App extends StatelessWidget {
@override
Widget build(BuildContext context) {
Widget home;

APIs().usersAPI.getCurrentUser().then((u) {
if (u == null) {
print('USER IS NULL');
home = WelcomePage();
} else {
print('USER IS NOT NULL');
home = FeedPage();
}
});

return MaterialApp(
title: "Jedi",
debugShowCheckedModeBanner: false,
home: home,
routes: {
'/login' : (context) => new LoginPage(),
'/feed' : (context) => new FeedPage(),
},
);
}
}

最佳答案

需要将App做成StatefulWidget,在设置首页时调用setState

setState(() {
home = WelcomePage();
});

setState(() {
home = FeedPage();
});

此外,您可能需要在 API 返回之前将主页设置为 null 以外的内容。

可能更好的模式是使用 FutureBuilder .这样,您将根据您所处的状态返回正确的 Widget。

return MaterialApp(
title: "Jedi",
debugShowCheckedModeBanner: false,
home: FutureBuilder<FirebaseUser>(
future: APIs().usersAPI.getCurrentUser(),
builder: (BuildContext context, AsyncSnapshot<FirebaseUser> snapshot) {

switch (snapshot.connectionState) {
case ConnectionState.none:
case ConnectionState.waiting:
return CircularProgressIndicator();
default:
if (snapshot.hasError)
return Text('Error: ${snapshot.error}');
else
if(snapshot.data == null)
return WelcomePage();
else
return FeedPage();
}

}
),
routes: {
'/login' : (context) => new LoginPage(),
'/feed' : (context) => new FeedPage(),
},
);
}

关于firebase - flutter/FirebaseAuth : How can I autologin a user at app launch?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50555440/

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