Flutter中如何在闪屏页判断登录用户身份跳转对应首页
闪屏页分角色跳转实现方案
整个实现逻辑没有复杂操作,按下面的步骤落地即可,不会出兼容问题。
一、登录环节的前置存储
用户不管走学生端还是教师端的登录流程,登录接口校验通过后,必须把两个核心字段加密后存在本地持久化存储(安卓用MMKV/SharedPreferences,iOS用Keychain/NSUserDefaults,跨端框架用对应封装的本地存储API就行,别存全局内存里,App被杀就会丢失数据):
is_login:布尔类型,标记当前用户是否处于有效登录状态user_role:整型类型,提前约定枚举值,比如1代表学生身份、2代表教师身份,不要存明文角色字符串,减少被本地篡改的概率
注意:这两个字段要和用户登录token绑定存储,不要分开存,避免数据不一致
二、闪屏页的判断流程
闪屏页作为冷启动首个入口页,不要塞多余的耗时逻辑,按顺序走判断即可:
- 页面初始化完成后,优先读取本地的
is_login字段 - 如果
is_login为false,直接跳转到公共的身份选择/登录入口页,同时销毁闪屏页实例,避免用户按返回键回到空白闪屏 - 如果
is_login为true,继续读取本地的user_role字段做分支判断:- 字段值为学生标识
1:路由跳转到学生专属首页,清掉页面栈里的闪屏页、登录页相关实例 - 字段值为教师标识
2:路由跳转到教师专属首页,同样做清栈处理 - 读取不到合法值(比如本地缓存损坏、被异常篡改):直接清空本地所有登录相关缓存,跳转到登录入口页
- 字段值为学生标识
踩坑提示:如果你的闪屏页有固定的品牌展示时长(比如2s),可以把上面的校验逻辑和闪屏倒计时并行执行,等倒计时结束直接拿校验结果跳转,不要等校验完再开始倒计时,平白增加用户等待时间。另外一定要加跳转防抖,避免闪屏页生命周期重入触发多次跳转报路由冲突错误。
三、兜底校验逻辑
- 不管进入学生还是教师首页,首页启动后可以静默拉一次用户信息接口做校验,如果发现接口返回的用户角色和当前进入的首页不匹配,直接弹提示清空本地缓存,跳回登录页,避免因为本地缓存被篡改进错端
- 任意页面触发登录失效(token过期、账号被顶登)时,除了跳回登录页,必须同步清空本地存的
is_login、user_role、token所有登录相关信息,避免下次冷启动读旧缓存跳错页面 - 不要在闪屏页发起网络请求拉取用户角色,冷启动阶段网络状态不可控,很容易导致闪屏页卡死、白屏,角色校验放在进入首页之后做静默处理即可。
内容的提问来源于stack exchange,提问作者MD.Mizan Hossan
相关产品推荐
相关产品推荐

