Flutter Web无法正确显示错误信息,如何选择合适降级版本?
问题详情
当前使用的Flutter版本:
Flutter (Channel stable, 3.22.2, on macOS 14.0 23A344 darwin-arm64, locale en-US)
在Flutter Web项目中执行以下代码时:
void main() { Future.delayed(Duration.zero, () { throw "boom"; }); runApp(MaterialApp(home: Scaffold(body: Center(child: Text("Hello"))))); }
无法显示"boom"错误内容及完整调用栈日志,仅得到模糊错误信息:
errors.dart:296 Uncaught (in promise) Error at Object.throw_ [as throw] (errors.dart:296:3) at main.dart:643:5 at future.dart:423:39 at internalCallback (isolate_helper.dart:48:11) throw_ @ errors.dart:296 (anonymous) @ main.dart:643 (anonymous) @ future.dart:423 internalCallback @ isolate_helper.dart:48 Promise.then (async)
需解决以下两个问题:
- 不存在该问题的最新Flutter版本是哪个?不能降级太多版本;
- 遇到这类阻塞性问题时,如何快速高效地选择合适的近期旧版本进行降级?
解决方案
1. 无问题的最新Flutter版本
根据该问题的公开追踪记录,Flutter 3.19.6是stable通道中最后一个能正常显示Future.delayed(Duration.zero)抛出错误的完整信息及调用栈的版本。3.22.x系列引入了这个错误日志丢失的问题,降级到3.19.6既能保留大部分新特性,又能解决当前调试阻塞的问题。
2. 快速选择合适旧版本的方法
- 通过版本变更日志定位:查看Flutter stable版本的变更记录,重点关注Web错误处理、异步任务日志相关的提交,找到问题引入的具体版本号,直接选择该版本的前一个stable版本。
- 二分法测试版本:若不确定问题引入的版本,从当前版本和已知无问题的旧版本之间用二分法缩小范围:
- 先降级到中间版本(如3.20.6)测试是否存在问题;
- 若问题存在,继续往更早版本排查;若不存在,则向靠近当前版本的方向测试,直到找到最后一个无问题的版本。
- 用Flutter命令快速切换:使用
flutter downgrade <版本号>直接指定版本降级,或通过flutter version查看本地已安装的版本,快速切换到之前用过的稳定版本。
内容的提问来源于stack exchange,提问作者TSR
相关产品推荐
相关产品推荐

