You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 01:18:00