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

构建Flutter Web时dart2js编译器崩溃:空值使用空检查运算符报错

问题根因

这是Dart 2.15.0~2.15.1版本dart2js编译器的已知内核序列化bug:当代码(含业务代码、引入的第三方pub依赖)中定义的extension扩展上挂载了注解,且注解常量在release编译的优化裁剪阶段被判定为无用内容移除时,BinaryPrinter.visitExtension 逻辑中的空检查操作符会直接读取到空值触发编译器崩溃。

  • Debug模式下Web构建不会执行全量内核序列化和无用代码裁剪逻辑,因此不会触发该崩溃分支,和描述的运行表现完全一致。
  • 该问题和使用的macOS版本无关,全平台下使用对应Dart版本构建Web release包都有概率命中。
修复方案

按落地成本从低到高排列:

  1. 升级Dart/Flutter SDK(推荐方案)
    该bug在Dart 2.16.0及后续稳定版本中已被官方修复,将本地Dart SDK升级到2.16.0及以上版本即可,对应Flutter SDK选择2.10.0及以上稳定分支,升级后无需修改业务代码。
    升级完成后执行以下命令清理缓存重新构建:

    # 确认Dart版本≥2.16.0
    dart --version
    flutter clean
    flutter pub get
    # 重新执行Web构建
    flutter build web
    
  2. 锁版本场景临时规避方案
    如果项目有版本锁定要求无法升级SDK,可二选一规避:

    • 排查项目内自定义extension、以及依赖的第三方包中的extension定义,移除extension声明上的所有注解(包括@Deprecated、自定义常量注解等)
    • 构建时降低dart2js优化等级,跳过触发bug的优化裁剪流程:
      flutter build web --dart2js-optimization O1
      
      注意:该方案会增大最终Web包产物体积,仅适合临时应急使用,不建议作为长期方案。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.01 03:21:40