Flutter中登录页已保存的token如何在列表页的Future方法中获取
实现步骤
- 第一步:确保列表页文件已引入
shared_preferences依赖包 - 第二步:在
listData异步方法中先获取SharedPreferences实例,再读取已存储的token值即可,需要同步处理token为空的异常场景
修改后的列表页完整代码
Future<List<ListAlbum>> listData() async { // 获取SharedPreferences实例,读取存储的token SharedPreferences sharedPreferences = await SharedPreferences.getInstance(); final String? token = sharedPreferences.getString("token"); // 判空处理,避免未登录场景下的请求异常 if (token == null || token.isEmpty) { throw Exception("未获取到登录凭证,请先登录"); } String url = 'https://portal-api.jomakhata.com/api/getOrganizationData?token=${token}'; Dio dio = Dio(); dio.options.headers['Content-Type'] = 'application/json'; final body = {'limit': 100, 'orderBy': 'idEmployee', 'orderType': 'DESC'}; final response = await dio.post(url, data: body); // 补充响应解析逻辑,匹配方法的返回值要求 if (response.statusCode == 200) { // 可根据实际接口返回结构调整解析逻辑 List<dynamic> dataList = response.data['data']; return dataList.map((item) => ListAlbum.fromJson(item)).toList(); } else { throw Exception('获取列表数据失败'); } }
额外优化建议
- 安全层面:token放在URL的query参数中容易被日志、代理抓取,更推荐放在请求头里传递,比如添加配置
dio.options.headers['Authorization'] = 'Bearer $token' - 复用层面:可以封装一个SharedPreferences工具类,统一管理存储、读取逻辑,不用每次重复编写获取实例的代码
内容的提问来源于stack exchange,提问作者Fozuda
相关产品推荐
相关产品推荐

