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

持续创作,加速成长!这是我参与「掘金日新计划 · 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。

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

在这里插入图片描述

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

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

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

在这里插入图片描述

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

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

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

二:解决方案

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

在这里插入图片描述

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

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

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

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

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

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


结束语

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

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

猜你喜欢

转载自juejin.im/post/7107052274597232647