持续创作,加速成长!这是我参与「日新计划 6 月更文挑战」的第14天,点击查看活动详情

这是【Flutter 问题系列第 66 篇】,如果觉得有用的话,欢迎关注专栏。

注:

因部分人不仅想知道问题如何解决,也想知道解决问题的过程,所以第一步的 问题描述 我写的比较详细,如果你的问题和我描述的相差不多,那应该就能解决。

也有朋友只想知道如何解决问题,那就请直接看第二步的 解决方案

一:问题描述

公司项目用的 Flutter SDK 版本是 2.2.3,内置的 Dart SDK 的版本是 2.13.4。

前几天调研 ios iap 内购支付时用到了一个插件 in_app_purchase,该插件所依赖的另外一个插件 in_app_purchase_storekit 要求 Dart SDK 最小版本是 2.14,然后我下载了最新的 Flutter SDK 3.0.1,内置的 Dart SDK 的版本是 2.17。

此时我本地存在两个 Flutter SDK 版本,一个是 2.2.3,一个是 3.0.1。

今天打开公司项目时,提示我自定义的安卓日历有一处错误,如下图所示

【Flutter 问题系列第 66 篇】本地存在多个 Flutter SDK 版本时,项目前后因引用了不同版本的 SDK 导致部分包文件报错的解决方案

提示我 The named parameter 'autovalidate' isn't defined,意思是没有定义的命名参数 autovalidate 。

之前一直都好好的,为什么“突然”就出错了呢。

然后我跳到这个 Form 类文件所在的路径,发现该类指向的是 Flutter SDK 3.0.1 版本,但是打开项目的 Flutter SDK path 配置,还是旧的 Flutter SDK 2.2.3 版本啊,如下图所示

【Flutter 问题系列第 66 篇】本地存在多个 Flutter SDK 版本时,项目前后因引用了不同版本的 SDK 导致部分包文件报错的解决方案

这就丈二和尚摸不着头脑了,然后尝试了几个不同的方法,如下

  • 执行 flutter clean 命令。
  • 删除 pubspec.lock 文件。
  • 删除 Flutter SDK 中 bin / cache / flutter_tools.stamp 文件。
  • 删除 Flutter SDK 中 bin / cache 文件夹。

遗憾的是上面几个方式对我来说并没什么作用,不过好在皇天不负有心人,最后问题解决了。

二:解决方案

找到你项目的 .packages 文件,如下图所示

【Flutter 问题系列第 66 篇】本地存在多个 Flutter SDK 版本时,项目前后因引用了不同版本的 SDK 导致部分包文件报错的解决方案

直接删除它,此时项目报错的地方还会在,然后关键地方要来了,不要眨眼。

直接点击运行按钮,重新跑一次项目,也许你会问报错还在怎么运行起来啊?

我开始也是这样想的,甚至都没这样去试一下,不过在项目重新运行构建的过程中,错误会自动解决,亲身体会,包你少走弯路。

ps:由上图可以看到我当前项目中引用的的确是 Flutter SDK 3.0.1 版本(万恶之源,哈哈)。

你的问题得到解决了吗?欢迎在评论区留言。

赠人玫瑰,手有余香,如果觉得文章不错,希望可以给个一键三连,感谢。


结束语

Google 的 Flutter 越来越火,截止 2022年6月9日 GitHub 标星已达 142K,Flutter 毅然是一种趋势,所以作为前端开发者,没有理由不趁早去学习。

无论你是 Flutter 新手还是已经入门了,不妨先点个关注,后续我会将 Flutter 中的常用组件(含有源码分析、组件的用法及注意事项)以及可能遇到的问题写到稀土博客中,希望自己学习的同时,也可以帮助更多的人。