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

Flutter中SharedPreferences保存登录Token失效问题求助

问题排查与修复方案

核心问题1:启动页登录状态判断逻辑完全错误

你的whereGoTo方法里的条件写反了:

if (isSignedIn != null && isSignedIn.isEmpty)

这个条件的意思是Token存在但为空字符串时才跳转到首页,和实际需求完全相反。正常逻辑应该是Token存在且不为空时跳首页,修改为:

if (isSignedIn != null && isSignedIn.isNotEmpty)
// 或者更简洁的写法(API返回的有效Token不会是空字符串):
if (isSignedIn != null)

核心问题2:保存Token时未等待异步操作完成

SharedPreferences.setString是异步方法,你的代码里没有加await,可能导致Token还没写入本地存储就跳转页面,重启后自然读不到。修改登录API方法里的保存代码:

// 原代码
pref.setString('token', myToken!);
// 修改为
await pref.setString('token', myToken!);

额外优化建议

  1. 增加Token非空校验,避免空值写入:
if (data.token != null && data.token.isNotEmpty) {
  await pref.setString('token', data.token);
  setState(() {
    myToken = data.token;
  });
  // 再执行跳转和提示
} else {
  // 处理API返回Token为空的异常情况
  ScaffoldMessenger.of(context).showSnackBar(
    SnackBar(content: Text('登录失败:未获取到有效Token')),
  );
}
  1. 保存后立即验证是否写入成功,方便调试:
await pref.setString('token', myToken!);
var savedToken = await pref.getString('token');
print('保存的Token:$savedToken'); // 查看是否和data.token一致

内容的提问来源于stack exchange,提问作者usama haider

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 17:17:22