Flutter Navigator 锁定错误

导航跳转时提示报错

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

报错原因:

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

你看到这个错误说明:

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

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

在 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');
}
相关推荐
陆断枫11 小时前
Flutter 3.47 动画引擎盘点:Impeller 全平台,和那些"新特性"
flutter
程序员老刘12 小时前
Flet 1.0 思路很好,可惜来晚了
flutter·ai编程·客户端
m0_7381858217 小时前
Flutter 鸿蒙化实战:qr_code_scanner_plus 适配 OpenHarmony,二维码扫描
flutter·华为·harmonyos·鸿蒙
恋猫de小郭18 小时前
Flutter + EmbeddingGemma 2,谷歌发布完全端侧的 AI Edge Foresight
android·前端·flutter
君赏1 天前
基于 FlutterPatch 快速接入 Flutter 热更新
flutter
律宏阔2 天前
Dart FFI 内存管理:用 using + Arena 替代嵌套 try-finally
前端·flutter
律宏阔2 天前
Flutter 调用 Go:从 c-shared + ffigen 到 @Native + Native Assets 踩坑记录
前端·flutter
律宏阔2 天前
Dart FFI 回调无法使用局部变量?使用 NativeCallable.isolateLocal
前端·flutter
天空之城--2 天前
Android一周动态:AI编程、Compose与车载生态新信号
android·flutter
码林鼠2 天前
Flutter之Widget/State 入门文档
flutter