Flutter热重载报错:'!navigator._debugLocked' is not true 求解决方案
这个报错的核心原因是热重载过程中,Navigator组件处于锁定状态(比如正在执行导航动画、或者代码在Widget生命周期阶段直接触发导航操作,热重载时重复执行导致冲突),而热重启会重置整个应用状态,所以不会触发该问题。以下是具体解决方案:
禁止在
initState、build等Widget生命周期方法中直接调用导航操作(如Navigator.push/pop),改用WidgetsBinding.instance.addPostFrameCallback延迟执行,确保Widget树完全构建完成后再操作导航:@override void initState() { super.initState(); WidgetsBinding.instance.addPostFrameCallback((_) { // 此处放置导航逻辑 Navigator.push(context, MaterialPageRoute(builder: (_) => TargetPage())); }); }避免在导航动画执行过程中触发热重载,等页面跳转/返回的动画完全结束后再执行热重载操作。
给导航逻辑添加执行状态标记,防止热重载时重复触发:在State类中新增布尔变量记录导航是否已执行,热重载时跳过重复操作:
bool _hasTriggeredNavigation = false; @override void initState() { super.initState(); WidgetsBinding.instance.addPostFrameCallback((_) { if (!_hasTriggeredNavigation) { Navigator.push(context, MaterialPageRoute(builder: (_) => TargetPage())); _hasTriggeredNavigation = true; } }); }若使用
GlobalKey<NavigatorState>进行全局导航,同样需要添加状态锁控制,确保热重载时不会重复执行导航逻辑。
内容的提问来源于stack exchange,提问作者Utsav Donda
相关产品推荐
相关产品推荐

