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!);
额外优化建议
- 增加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')), ); }
- 保存后立即验证是否写入成功,方便调试:
await pref.setString('token', myToken!); var savedToken = await pref.getString('token'); print('保存的Token:$savedToken'); // 查看是否和data.token一致
内容的提问来源于stack exchange,提问作者usama haider
相关产品推荐
相关产品推荐

