FlutterError: 使用不包含 Navigator 的上下文请求导航操作
FlutterError: Navigator operation requested with a context that does not include a Navigator
ID: flutter/navigator-operation-requested-with-a-context-that-does-not-include-a-navigator
版本兼容性
| 版本 | 状态 | 引入 | 弃用 | 备注 |
|---|---|---|---|---|
| Flutter 3.10 | active | — | — | — |
| Flutter 3.13 | active | — | — | — |
| Flutter 3.16 | active | — | — | — |
根因分析
使用未位于 Navigator 小部件下的 BuildContext 调用 Navigator.push/pop/replace,通常来自无路由的覆盖层、对话框或 MaterialApp 构建之前。
English
Navigator.push/pop/replace is called using a BuildContext that is not under a Navigator widget in the widget tree, typically from a context in a route-less overlay, dialog, or before MaterialApp is built.
官方文档
https://api.flutter.dev/flutter/widgets/Navigator-class.html解决方案
-
Use Navigator.of(context, rootNavigator: true) to explicitly access the root navigator, or ensure the context is from a widget inside a MaterialApp/CupertinoApp.
-
Wrap the navigation call in a post-frame callback to ensure the widget tree is built and the context is valid.
无效尝试
常见但无效的做法:
-
80% 失败
The context may become stale or detach from the tree; the error persists if the widget is no longer in a route.
-
90% 失败
The root context is above the Navigator; navigator operations require a descendant context.
-
70% 失败
GlobalKey may still reference a disposed widget, yielding a context without a Navigator.