Flutter 3.0.0调试无报错提示Lost connection to device如何解决
问题根因
该异常是Flutter 3.0.0初始稳定版自带的原生框架Bug,与业务代码逻辑无关。触发条件为debug运行模式下,用户交互触发UI重绘(比如点击按钮更新列表、新增订单这类setState操作)时,Dart VM调试服务会出现线程死锁,外在表现就是应用冻结1~2分钟后要么自行恢复运行,要么直接断开设备连接,全程不会输出任何错误堆栈,在Android、Windows桌面端复现概率极高,哪怕是仅实现按钮加列表元素的最简Demo也会触发,不存在复杂逻辑导致性能问题的可能。
修复方案
按优先级从高到低选择操作即可:
- 最直接的根治方案是升级Flutter到3.0.1及以上的稳定分支版本,该死锁Bug在3.0.1的官方热修复中已经被彻底解决,在终端执行如下命令完成升级:
升级完成后执行flutter upgradeflutter --version确认版本号高于3.0.0,清理构建缓存后重新运行应用即可,绝大多数同场景问题通过该操作都能直接解决。 - 若因项目依赖限制暂时无法升级Flutter版本,可临时切换到profile或release模式运行验证交互逻辑,这两种运行模式不会加载debug模式下的VM调试监听服务,不会触发该死锁问题,对应运行命令如下:
# 以profile模式运行(可查看性能数据,不支持断点、热重载) flutter run --profile # 以release模式运行(最终发布包模式,无调试能力) flutter run --release - 若必须锁定Flutter 3.0.0版本在debug模式下调试,可手动关闭DevTools中Widget检查器的自动刷新功能降低触发概率:打开DevTools面板进入Widget Inspector页,取消勾选Auto-refresh on select选项即可,但该方式无法100%规避死锁问题。
注意:无需修改现有业务代码,该问题和状态管理写法、列表渲染实现、业务逻辑复杂度没有任何关系,调整业务代码对解决该问题无效。
内容的提问来源于stack exchange,提问作者KarimHachicha
相关产品推荐
相关产品推荐

