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
相关产品推荐
相关产品推荐

