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

Flutter Navigator报错'_history.isNotEmpty'问题修复咨询

修复Flutter导航栈断言错误 (_history.isNotEmpty)

问题原因

你遇到的'package:flutter/src/widgets/navigator.dart': Failed assertion: line 5501 pos 12: '_history.isNotEmpty': is not true错误,核心原因是logUserOut方法中连续执行了两次Navigator.pop(context):

  • 第一次pop关闭抽屉是合理操作
  • 第二次pop会尝试退出当前页面,但如果当前页面已经是导航栈的最后一页,执行后会直接清空导航栈,后续的Navigator.push就会触发栈为空的断言错误,最终导致空白页面。

另外,登出场景下不应保留登录后的页面栈(用户不该能返回登录状态的页面),直接用push也不符合业务逻辑。

修复方案

修改logUserOut方法,移除多余的pop操作,改用Navigator.pushAndRemoveUntil清空导航栈并跳转至登出页面:

void logUserOut(BuildContext context) {
  // 仅关闭抽屉
  Navigator.pop(context);
  // 跳转至登出页面,同时清空所有历史路由
  Navigator.pushAndRemoveUntil(
    context,
    MaterialPageRoute(builder: (context) => const HandleLogout()),
    (Route<dynamic> route) => false, // 条件为false表示移除全部历史页面
  );
}

补充说明

  • pushAndRemoveUntil会将新页面加入栈中,同时移除所有满足条件的历史页面,这里的条件确保登出后导航栈仅保留HandleLogout页面,避免用户返回登录状态的页面。
  • 如果你的HandleLogout组件在完成Firebase登出后会自动跳转至登录页,也可以在HandleLogout内部使用pushAndRemoveUntil完成登录页跳转,保持逻辑统一。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 15:00:17