如何解决应用程序正在检查用户是否登录时的 Flutter 启动屏幕
我最近构建了一个 Flutter 应用程序。我有一种方法可以检查用户是否登录并在确认检查后显示相应的屏幕。如果用户未登录,它将返回登录屏幕,但如果用户已经登录,则应显示主屏幕。但是,如果用户已登录,它会在显示主屏幕之前显示登录屏幕一两秒钟。检查用户是否登录的代码
class CheckAuth extends StatefulWidget {
@override
_CheckAuthState createState() => _CheckAuthState();
}
class _CheckAuthState extends State<CheckAuth> {
bool isAuth = false;
@override
void initState() {
super.initState();
_checkIfLoggedIn();
}
void _checkIfLoggedIn() async {
SharedPreferences localStorage = await SharedPreferences.getInstance();
var token = localStorage.getString('token');
if (token != null) {
setState(() {
isAuth = true;
});
}
}
@override
Widget build(BuildContext context) {
Widget child;
if (isAuth) {
child = HomePage();
} else {
child = Login();
}
return Scaffold(
body: child,);
}
}
这是主要的功能代码
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
// This widget is the root of your application.
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',theme:
ThemeData(
primarySwatch: Colors.blueGrey,visualDensity: VisualDensity.adaptivePlatformDensity,),home: CheckAuth(),);
}
}
我想在后台执行检查时显示启动画面,并显示正确的屏幕
解决方法
您正在 /opt/tomcat/apache-tomcat-<version>
函数中等待 SharedPreferences.getInstance()
。但是,不能等待此功能,因为我不相信 flutter 具有异步 init 功能。
解决方案是使用 _checkIfLoggedIn()
构建器,该构建器将根据异步调用的状态显示所需内容。
有 3 种可能的状态:
- 该计划正在等待未来完成。
- 未来已经结束,是假的。
- 未来会结束并且是真实的。
Future
,
_checkIfLoggedIn() 是一个异步函数,需要一些时间来完成执行。首先显示登录屏幕,因为 isAuth 被初始化为 false。您可以在执行 _checkifLoggedIn 时显示加载程序;
您也可以为此使用枚举
enum AuthState{
unkown,loggedIn,loggedOut
}
创建一个 AuthState 类型的变量并将其初始化为 unknown,因为我们一开始不知道用户是否登录。
AuthState authState= AuthState.unknown
_checkIfLoggedIn() 完成后,您可以将其设置为 AuthState.loggedIn 或 AuthState.loggedOut
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。