Flutter 当应用程序检查登录状态时,如何设置加载屏幕?
我使用SharedReferences来保持登录状态。它很好用 但当我打开这个时,关闭我的应用程序。它把我所有的屏幕都显示出来,就像闪屏一样,然后它就停留在右边的屏幕上 但是我不想要这个,这个不好 我想当应用程序检查登录状态时,它会显示一个加载屏幕或任何东西,然后在完成其显示应用程序右屏幕 我该怎么做 这是我的登录状态检查代码Flutter 当应用程序检查登录状态时,如何设置加载屏幕?,flutter,dart,Flutter,Dart,我使用SharedReferences来保持登录状态。它很好用 但当我打开这个时,关闭我的应用程序。它把我所有的屏幕都显示出来,就像闪屏一样,然后它就停留在右边的屏幕上 但是我不想要这个,这个不好 我想当应用程序检查登录状态时,它会显示一个加载屏幕或任何东西,然后在完成其显示应用程序右屏幕 我该怎么做 这是我的登录状态检查代码 checkLoginStatus() async { sharedPreferences = await SharedPreferences.getInstan
checkLoginStatus() async {
sharedPreferences = await SharedPreferences.getInstance();
if (sharedPreferences.getString("empid") == null) {
Navigator.of(context).pushAndRemoveUntil(
MaterialPageRoute(builder: (BuildContext context) => Home()),
(Route<dynamic> route) => false);
}
}
checkLoginStatus()异步{
SharedReferences=等待SharedReferences.getInstance();
if(sharedReferences.getString(“empid”)==null){
Navigator.of(context).pushandremoveintil(
MaterialPackageRoute(生成器:(BuildContext上下文)=>Home()),
(路由)=>false);
}
}
个人而言,我喜欢使用变量\u isLoading,我在使用设置状态的登录方法开始时将其设置为true。然后使用这个bool,您只需更改脚手架中显示的内容
bool _isLoading = false;
checkLoginStatus() async {
setState() => _isLoading = true;
sharedPreferences = await SharedPreferences.getInstance();
if (sharedPreferences.getString("empid") == null) {
Navigator.of(context).pushAndRemoveUntil(
MaterialPageRoute(builder: (BuildContext context) => Home()),
(Route<dynamic> route) => false);
} else {
setState() => _isLoading = false;
}
}
MycurrentUser只是我创建的一个类,它包含一个enumAuthStatus,其值可以是notSignedIn或signedIn。如果在加载时将状态设置为null,则可以显示加载屏幕。代码段
void main async {
bool isUserLogin = await User.isUserLogin();
if (isUserLogin) { // wait untill user details load
await User.currentUser.loadPastUserDetails();
}
runApp(MyApp(isUserLogin));
}
及
希望这有帮助 您是否已为store user pref details创建了singleton类?这是一个简单的方法,代码似乎是正确的,只需在按下并移动之前重置详细信息,直到我已经有了这个。。兄弟我只是在寻找时检查登录状态我需要显示加载屏幕。当应用程序找到正确的状态,然后加载停止和停留。你遵循集团模式吗?ScopedModel brother?你想要这样的东西,第一次显示登录屏幕,然后每次回来,然后显示主屏幕?我知道这一点,我的兄弟。当应用程序打开时,它的第一选择是登录屏幕。但如果用户已经登录。应用程序不显示第一次主屏幕首先显示其登录屏幕,然后在checklogin状态检测到有已登录的用户时,自动通过主屏幕。但我想,如果用户已经登录,我只是第一次显示我的主屏幕或加载。但首先,如果用户已经登录,它会显示我的登录屏幕,这就是问题所在。在这种情况下,您可以使用一个页面来构建登录页面(如果用户未连接)、登录时的主屏幕和加载时的加载屏幕,而其他两种情况都无效。
void main async {
bool isUserLogin = await User.isUserLogin();
if (isUserLogin) { // wait untill user details load
await User.currentUser.loadPastUserDetails();
}
runApp(MyApp(isUserLogin));
}
class MyApp extends StatelessWidget {
bool isUserLogin;
MyApp(this.isUserLogin);
@override
Widget build(BuildContext context) {
var defaultRoot = isUserLogin ? HomePage() : LoginScreen();
final material = MaterialApp(
debugShowCheckedModeBanner: false,
home: defaultRoot,
);
return material;
}
}