登录token的处理,数据本地存储,路由拦截
登录逻辑
添加token
登录成功,保存token到本地,转跳到首页,移除其他栈,防止返回回到登录页面
移除token
未登录 路由拦截找不到token,转跳到登录页面或者弹窗
token过期,后台返回token,api拦截,移除token,转跳到登录页面
退出登录移除token,转跳到登录页面,移除前面所有路由栈
本地存储
flutter暂时没有内置本地存储,官方推荐shared_preferences
shared_preferences: ^0.5.4+1
复制代码import 'package:shared_preferences/shared_preferences.dart';
复制代码
基本用法
实例下
final prefs = await SharedPreferences.getInstance();
复制代码
保存
保存字符类型数据setString
保存int类型数据setInt
设置布尔类型数据setBool
设置Double类型数据setDouble
获取
获取字符类型数据getString
获取int类型数据getInt
获取布尔类型数据getBool
获取Double类型数据getDouble
移除
移除数据remove
清空
清空所有数据clear
(更多更详细请看官方文档,最下面的相关链接里面的SharedPreferences class)
登录成功数据存储(保存登录token)
Map data = response_map['data'];
final prefs = await SharedPreferences.getInstance();
final setTokenResult = await prefs.setString('user_token', data['token']);
await prefs.setInt('user_phone', data['phone']);
await prefs.setString('user_phone', data['name']);
if(setTokenResult){
debugPrint('保存登录token成功');
Navigator.of(context).pushNamedAndRemoveUntil('/', (route) => route == null,);
}else{
debugPrint('error, 保存登录token失败');
}
复制代码
没有登录转跳到登录页面
handleToken() async{
final prefs = await SharedPreferences.getInstance();
final token