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
相关产品推荐
相关产品推荐

