You need to enable JavaScript to run this app. BlocListener未监听当前屏幕事件:VerifyScreen操作触发RegistrationScreen监听器
优惠活动
大模型
产品
解决方案
定价
更多

BlocListener未监听当前屏幕事件:VerifyScreen操作触发RegistrationScreen监听器

问题原因

  • 路由栈中RegistrationScreen未销毁:跳转VerifyScreen时如果使用Navigator.push压栈操作而非Navigator.pushReplacement替换路由,RegistrationScreen会一直保留在路由栈中,它绑定的BlocListener也处于活跃状态,只要RegistrationCubit发出新状态,旧页面的Listener就会触发。
  • VerifyScreen未正确订阅同一Cubit实例:如果RegistrationCubit的BlocProvider仅包裹RegistrationScreen子树,那么VerifyScreen不属于该子树范围,无法获取到同一个Cubit实例,VerifyScreen中的BlocListener自然不会收到状态通知。
  • 状态处理逻辑冲突:若旧页面Listener处理状态时执行了Cubit关闭、全局事件拦截等操作,也会导致新页面Listener无法正常响应状态。

修复方案

  • 调整路由跳转逻辑:如果跳转VerifyScreen后不需要返回RegistrationScreen,改用Navigator.pushReplacement替换路由,让RegistrationScreen正常销毁,其绑定的Listener也会同步卸载。
  • 调整Cubit提供范围:将RegistrationCubit的BlocProvider提到两个页面的共同父节点(如路由的上层节点),确保两个页面可以访问到同一个Cubit实例。
  • 增加场景判断逻辑:如果需要保留两个页面同时在路由栈中,可以在Cubit的状态类中新增场景标识字段,两个页面的Listener处理状态前先校验场景标识,只处理当前页面对应的状态即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.14 03:33:03