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');
}
相关推荐
程序员老刘2 小时前
放弃折腾后端服务器后,这才是独立开发MVP的最优解
flutter·客户端·firebase
独特的螺狮粉2 小时前
云隙一言:鸿蒙Flutter框架 实现的随机名言应用
开发语言·flutter·华为·架构·开源·harmonyos
Utopia^4 小时前
鸿蒙flutter第三方库适配 - 图片拼图工具
flutter·华为·harmonyos
星释4 小时前
鸿蒙Flutter实战:29.优先使用联合插件开发鸿蒙化插件
flutter·华为·harmonyos·鸿蒙
见山是山-见水是水6 小时前
鸿蒙flutter第三方库适配 - 文件加密工具
flutter·华为·harmonyos
麒麟ZHAO7 小时前
鸿蒙flutter第三方库适配 - 文件对比工具
数据库·redis·flutter·华为·harmonyos
weixin_443478517 小时前
Flutter组件学习之图表
学习·flutter·信息可视化
猿饵块7 小时前
flutter--基础环境安装
flutter
见山是山-见水是水8 小时前
Flutter 框架跨平台鸿蒙开发 - 电子发票智能管理
flutter·华为·harmonyos
MonkeyKing9 小时前
Flutter刷新机制与重建优化
flutter