Flutter Navigator 锁定错误

导航跳转时提示报错

Assertion failed: >file:///D:/sdk/flutter/packages/flutter/lib/src/widgets/navigator.dart:4536:12 !_debugLocked is not true

报错原因:

Navigator 内部在处理一次导航(比如 pushpop)时,会将其锁定(_debugLocked = true),直到该导航操作完成。

你看到这个错误说明:

在正在执行 pushpoppushReplacement 等操作期间,又触发了新的导航请求。

例如,可能触发这个报错情形

build() 过程中触发导航

scss 复制代码
dart
@override
Widget build(BuildContext context) {
  Navigator.pushNamed(context, '/home'); // ❌ 错误:build 过程中导航
  return Container();
}
perl 复制代码
dart
onPressed: () {
  Navigator.pop(context); // 弹窗关闭
  Navigator.pushNamed(context, '/next'); // ❌ 同步立即 push,会报错
}

解决方法

使用 Future.microtask / WidgetsBinding.instance.addPostFrameCallback

推迟导航操作,等当前帧绘制完毕:

ini 复制代码
dart
WidgetsBinding.instance.addPostFrameCallback((_) {
  Navigator.pushNamed(context, '/home');
});

或者:

ini 复制代码
dart
Future.microtask(() {
  Navigator.pushNamed(context, '/home');
});

await 弹窗关闭之后再导航

dart 复制代码
dart
onPressed: () async {
  Navigator.pop(context); // 关闭弹窗
  await Future.delayed(Duration(milliseconds: 300)); // 等一会儿再导航
  Navigator.pushNamed(context, '/next');
}
相关推荐
0wioiw012 小时前
Flutter基础(前端教程③-跳转)
前端·flutter
Lefan14 小时前
一文了解什么是Dart
前端·flutter·dart
0wioiw015 小时前
Flutter基础(前端教程④-组件拼接)
前端·flutter
木叶丸15 小时前
Flutter 生命周期完全指南
android·flutter·ios
用户74279877375915 小时前
[flutter翻书效果] 用flutter实现一个书籍翻页效果
flutter
技术蔡蔡1 天前
Flutter和Firebae简单的聊天应用
flutter·全栈·firebase
小蜜蜂嗡嗡2 天前
flutter封装vlcplayer的控制器
前端·javascript·flutter
你听得到112 天前
从需求到封装:手把手带你打造一个高复用、可定制的Flutter日期选择器
前端·flutter
哲科软件2 天前
跨平台开发的抉择:Flutter vs 原生安卓(Kotlin)的优劣对比与选型建议
android·flutter·kotlin
天涯海风2 天前
Kuikly 与 Flutter 的全面对比分析,结合技术架构、性能、开发体验等核心维度
flutter·kuikly