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

Flutter Navigator.popUntil无法停在指定命名路由/ 全部弹出黑屏如何解决

问题原因
  • 你在通过MaterialPageRoute创建路由实例时,没有将onGenerateRoute接收的routeSettings传入路由构造方法,导致所有路由的settings.name属性为空,ModalRoute.withName("/")无法匹配到根路由,最终会把栈内所有路由全部弹出造成黑屏。
  • 你的导航流程栈逻辑本身是正常的:初始路由/入栈后,执行pushNamed("/Loading")栈变为[/, /Loading],再执行pushReplacementNamed("/Menu")会替换顶层路由,栈变为[/, /Menu],只要根路由的name属性正确,popUntil就可以正常停在根页面。
修复方案

修改AppRouter的onGenerateRoute方法,创建MaterialPageRoute时传入settings参数即可:

class AppRouter {
  Route? onGenerateRoute(RouteSettings routeSettings) {
    switch (routeSettings.name) {
      case '/':
        // 新增settings参数传入,绑定路由名称
        return MaterialPageRoute(
          builder: (_) => const LoadingScreen(),
          settings: routeSettings
        );
      case '/Menu':
        return MaterialPageRoute(
          builder: (_) => const MenuScreen(),
          settings: routeSettings
        );
      case '/Loading':
        return MaterialPageRoute(
          builder: (_) => const LoadingScreen(),
          settings: routeSettings
        );
      default:
        return null;
    }
  }
}

修改后所有路由都会携带正确的命名标识,ModalRoute.withName("/")就能正确匹配到根路由,popUntil执行时弹出到根路由就会自动停止,不会再出现黑屏问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 18:06:08