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

触发屏幕监听时调用MobX Store中所有Dio请求的问题求助

排查TextField触发屏幕监听时所有Dio请求被调用的问题

以下是几个可能的成因及对应的排查方向:

  • 全局布局变化监听的误触发:检查是否实现了WidgetsBindingObserver并监听了didChangeMetrics方法——TextField获取焦点时会触发屏幕布局(比如软键盘弹出)变化,若该回调里不小心写了触发所有Dio请求的逻辑,就会出现这个问题。
  • Dio拦截器的异常逻辑:查看自定义的Dio拦截器,比如onRequest或其他拦截方法中是否存在错误的条件判断,导致只要有事件触发就批量执行请求;或者拦截器被错误地全局绑定,引发连锁调用。
  • 状态组件的意外重建:即便你排查过Observable Widget,还是要检查FutureBuilder、StreamBuilder这类组件——如果它们的数据源绑定到了全局请求的Future/Stream,当TextField触发屏幕重绘时,这些组件会重建并重新执行请求。
  • MobX全局状态的隐式触发:哪怕没初始化目标MobX类,也要确认是否有全局MobX store被其他模块初始化,或者存在跨组件的状态监听,比如某个全局action被屏幕布局变化事件触发,进而调用所有Dio请求。
  • MediaQuery变化的监听逻辑:软键盘弹出/收起会触发MediaQuery的变化,如果有组件监听MediaQuery.of(context)的变化并在回调中执行请求,就会导致问题。建议在所有Dio请求入口添加日志,打印StackTrace.current,追踪请求的触发栈。

实用排查步骤:

  1. 在每个Dio请求的调用处添加日志,输出调用栈,精准定位触发源。
  2. 临时注释TextField相关代码,验证问题是否消失,再逐步恢复代码缩小排查范围。
  3. 检查WidgetsBinding.instance.addObserver的注册位置,确认回调逻辑是否存在触发请求的可能。

内容的提问来源于stack exchange,提问作者Sultan SARIBAŞ

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 02:14:58