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

无网络时App未按Token存在逻辑跳转至Home页面问题求助

问题分析与解决思路

核心问题定位

断网重启App时,bearerTokenProvider读取本地Token失败,导致bearer为null,进而跳转到登录页。但联网时读取正常,说明Token读取逻辑可能依赖网络状态,或者本地存储的Token读取存在异步时序问题。

具体排查与解决方向

  • 检查bearerTokenProvider的实现
    确认Provider内部是否在读取本地Token时,执行了需要网络的操作(比如附带了Token有效性校验的网络请求)。如果是,断网时校验请求失败会导致返回null,这就违背了“仅判断Token是否存在”的初衷。应修改Provider,让它只负责从本地存储(如SharedPreferences、Hive)读取Token,不做网络校验。

  • 确保本地Token读取的可靠性
    本地存储的读取应是纯本地操作,不依赖网络。可以直接在navigate方法中替换为原生本地存储读取逻辑做测试,比如:

    // 示例:用SharedPreferences直接读取
    final prefs = await SharedPreferences.getInstance();
    final bearer = prefs.getString('bearer_token');
    

    如果这样能正常读取到Token,说明问题出在bearerTokenProvider的实现上。

  • 处理异步读取的时序问题
    检查SplashScreen的生命周期,确保navigate方法在Widget完全挂载后执行,避免因!mounted提前返回导致跳转逻辑未执行。可以将navigate放在initState的postFrameCallback中:

    @override
    void initState() {
      super.initState();
      WidgetsBinding.instance.addPostFrameCallback((_) {
        navigate();
      });
    }
    
  • 分离Token存在性判断与有效性校验
    跳转逻辑只判断Token是否存在,Token的有效性校验(比如过期、失效)放在Home页面完成:进入Home后,若断网则显示无网络弹窗;若联网则发起校验请求,校验失败再跳转登录页。这样既符合预期的跳转逻辑,又能保证Token的有效性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 23:04:57