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

Flutter二级页面登出异常求助:数据库已登出但页面未跳转

问题原因分析

  1. 未清空核心认证变量:登出函数仅重置了refreshToken和refreshTokenExpiryDate,但内存中的accessToken未被清空,导致isAuth的判断逻辑仍返回true,MaterialApp的Consumer不会触发页面切换到登录页。
  2. 导航栈未彻底清空:从用户页面登出时仅pop回首页,首页仍保留在导航栈中,即使isAuth变为false,现有栈内页面会覆盖MaterialApp的home配置,无法自动跳转登录页。

具体修复方案

1. 完善登出函数,清空所有认证状态

修改logout函数,确保清空所有内存中的认证变量,并调整状态通知时机:

Future<void> logout() async {
  print('logout started');
  final url = '${PurohitApi().baseUrl}${PurohitApi().login}/$sessionId';
  var response = await http.delete(
    Uri.parse(url),
    headers: {
      'Content-Type': 'application/json; charset=UTF-8',
      'Authorization': accessToken!
    },
  );

  var userStatus = json.decode(response.body);
  print(userStatus);

  // 取消认证定时器
  if (authTimer != null) {
    authTimer!.cancel();
    authTimer = null;
  }

  // 清空所有内存中的认证变量
  refreshToken = null;
  refreshTokenExpiryDate = null;
  accessToken = null; // 新增:清空accessToken
  sessionId = null; // 若sessionId参与认证逻辑,同步清空

  // 清空本地存储的认证信息
  final prefs = await SharedPreferences.getInstance();
  await prefs.clear();
  
  // 最后通知状态变化,确保所有变量已更新完成
  notifyListeners();
}

2. 修改登出按钮逻辑,强制清空导航栈

在登出按钮的onTap事件中,执行登出后直接清空所有导航栈并跳转登录页:

ListTile(
  leading: const Icon(Icons.exit_to_app),
  title: const Text("Logout"),
  onTap: () async {
    Navigator.pop(context); // 关闭当前用户页面
    await Provider.of<Auth>(context, listen: false).logout(); // 执行登出
    // 清空所有导航栈,强制跳转登录页
    Navigator.pushAndRemoveUntil(
      context,
      MaterialPageRoute(builder: (context) => const Adminlogin()),
      (route) => false, // 条件为false表示清空所有历史页面
    );
  },
)

3. 验证isAuth的判断逻辑

确保Auth类中isAuth的getter正确依赖所有认证状态,示例如下:

bool get isAuth {
  // 根据实际认证逻辑调整,例如判断accessToken存在且未过期
  return accessToken != null && 
         (refreshTokenExpiryDate?.isAfter(DateTime.now()) ?? false);
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 11:35:23