升级旧Flutter项目全量依赖后 mp_chart 0.3.1 出现构建报错如何解决
mp_chart 0.3.1版本兼容性报错解决方案
你遇到的两个报错完全是mp_chart 0.3.1本身的版本兼容性问题,和你的项目业务代码无关,该版本最后更新于2021年,未适配后续推出的高版本Flutter、Dart的语法变更。
报错原因
- 第一个
InlineSpan无text属性报错:Flutter 2.10及以上版本将TextPainter的text属性类型从TextSpan调整为了InlineSpan,而InlineSpan本身没有textgetter,只有其子类TextSpan才有该属性,mp_chart旧代码没有做类型适配。 - 第二个
FutureOr无then方法报错:Dart 2.12及以上版本强化了类型校验,FutureOr属于联合类型,可能是直接值也可能是Future对象,不能直接调用then方法,mp_chart旧代码未做兼容处理。
修复方案
方案1:降级Flutter版本
将你的Flutter版本降级到2.8.x及以下版本,该版本区间的Flutter、Dart语法完全匹配mp_chart 0.3.1的代码要求,无需修改任何代码即可正常运行。
方案2:手动适配mp_chart源码
你可以通过以下两种方式修改源码适配高版本环境:
- 直接修改Pub缓存中的对应文件:
- 打开
mp_chart-0.3.1/lib/mp/core/utils/painter_utils.dart,将第15行的var preText = painter.text.text;修改为var preText = (painter.text as TextSpan).text; - 打开
mp_chart-0.3.1/lib/mp/chart/chart.dart,将第51行直接调用then的代码前包裹一层Future.value(),比如原代码为xxx.then((value) {,修改为Future.value(xxx).then((value) {
- 打开
- 也可以fork该库的官方仓库修改后,在
pubspec.yaml中通过git依赖指向你修改后的仓库地址,避免本地缓存修改丢失。
方案3:替换图表库
直接弃用停止维护的mp_chart,换用当前仍在持续迭代的fl_chart等图表库,这类库已适配最新的Flutter、Dart版本,不会出现兼容性问题。
内容的提问来源于stack exchange,提问作者Franzi Notz
相关产品推荐
相关产品推荐

