flutter - 使用 FutureBuilder 的登录流导航:Flutter?
问题描述
import 'package:flutter/material.dart';
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Consumer<AppThemeNotifier>(
builder: (BuildContext context, AppThemeNotifier value, Widget child) {
return Provider(
create: "XXXXXXX",
dispose: "XXXXXXX",
child: MaterialApp(
debugShowCheckedModeBanner: false,
theme: AppTheme.getThemeFromThemeMode(value.themeMode()),
home: Base()),
);
},
);
}
}
class Base extends StatefulWidget {
@override
_BaseState createState() => _BaseState();
}
class _BaseState extends State<Base> {
@override
Widget build(BuildContext context) {
return FutureBuilder<SessionAuth>(
future: Provider.of<AppThemeNotifier>(context, listen: false).validate,
builder: (context, snapshot) {
if (snapshot.connectionState == ConnectionState.done) {
SessionAuth session = new SessionAuth();
if (session.userId != null && session.isLoggedIn) {
return FullApp();
} else if (isFirst) {
return OnBoardingScreen();
}
return LoginScreen();
} else {
return Scaffold(
body: Center(child: CircularProgressIndicator()),
);
}
},
);
}
}
我试图根据通过提供程序包完成的会话验证来导航不同的屏幕。(登录流程管理)
简单地说,我想根据会话详细信息替换屏幕
分解
- 如果
userId
不等于 null 并且isLoggedin
是true
-> FullApp - 否则如果用户
isFirst
是true
-> OnBoardingScreen - 其他登录屏幕
错误
- 颤振:在 null 上调用了方法“>=”。
- 颤振:接收者:空
- 颤振:尝试调用:> =(0.0)
会话验证
class SessionAuth {
SessionAuth({this.isLoggedIn, this.userId, this.isFirst});
int userId;
bool isLoggedIn;
bool isFirst;
}
证实
Future<SessionAuth> get validate async {
SharedPreferences prefs = await SharedPreferences.getInstance();
SessionAuth auth = new SessionAuth();
auth.userId = prefs.getInt('userId') ?? null;
auth.isLoggedIn = prefs.getBool('isLoggedIn') ?? false;
auth.isFirst = prefs.getBool("isFirst") ?? null;
return auth;
}
解决方案
推荐阅读
- javascript - li.parent 不是函数
- kubernetes - 设置 GKE 内部负载平衡器时,为什么我可以从单独的虚拟机访问 IP 地址,但不能在集群内访问?
- python - 如何删除重复的python路径
- javascript - 在 cd react-app 之后在 react js 中使用 npm start 时出错
- c# - Sqlite - 不存在这样的表,即使它存在?
- spring-boot - Springboot 应用程序中带有 jwk-set-uri (oauth2) 的未知主机异常
- c# - 如何在 DataGrid WPF 中添加行
- javascript - 不加载第三方代码 -JS -Bing Maps -Lighthouse
- javascript - 有数据时才做 v-for
- c# - C# 多列单列总和作为 DataRow