You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter中ListTile的onTap点击无效,Navigator抛出_debugLocked断言错误如何解决

问题原因

!_debugLocked 断言报错的核心是Navigator正在处理路由切换、动画、页面刷新的过程中被触发了新的跳转操作,此时Navigator处于锁定状态,无法响应新的指令。

排查&解决方案
  • 首先优先用帧回调包裹跳转逻辑,避开当前渲染周期的锁定状态,修改ListTile的onTap代码如下:
ListTile(
  leading: Icon(Icons.person),
  title: Text("My Account"),
  onTap: () {
    WidgetsBinding.instance.addPostFrameCallback((_) {
      Navigator.of(context).pushNamed(profilePage);
    });
  },
)

这个方案可以解决90%以上的同类报错,包括点击时页面有抽屉收起动画、水波纹动画、弹窗关闭动画等场景的冲突问题。

  • 检查当前context是否能获取到Navigator实例:如果你的ListTile所处的组件是直接作为MaterialApp的home参数传入的,那当前context的上层没有Navigator实例,会导致跳转失败。解决方法是把home对应的组件单独抽离成独立的Stateless/Stateful组件,用子组件的context调用Navigator即可。

  • 确认路由配置已经正确挂载:检查MaterialApp的参数里是否配置了onGenerateRoute: controller,不要同时配置routes和onGenerateRoute参数避免冲突,也不要写错路由名称的常量映射。


内容的提问来源于stack exchange,提问作者Sadam Khan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 17:27:01