【Flutter 问题系列第 57 篇】Context: Found this candidate, but the arguments don‘t match. const MaterialApp

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

当前开发环境
Flutter 版本:2.2.3,Dart 版本:2.13.4,操作系统:macOS BigSur 11.4 M1,Android Studio 版本:Arctic Fox 2020.3.1 Pathc 4。

今天碰到的这个问题算是打破了我以往的认知,特此记录下。

一:问题描述

新建了一个 Flutter 项目 A,然后复制了本地另外一个项目 B 的 pubspec.yaml 文件到 A 项目,以为 B 项目都能正常的运行,A 项目自然而然的没问题,然后就报出了如下问题
在这里插入图片描述
关键词一是 flutter/.pub-cache/hosted/pub.flutter-io.cn/get-4.6.1 插件中的 get_cupertino_app.dart 文件报错,

报错原因是No named parameter with the name 'useInheritedMediaQuery,翻译后的意思是 没有名称为useInheritedMediaQuery 的命名参数。

关键词二是 flutter/packages/flutter/lib/src/cupertino/app.dart 文件报错,

报错原因是 Context: Found this candidate, but the arguments don't match. const MaterialApp,翻译后的意思是 上下文:找到了候选对象 const MaterialApp,但参数不匹配。

还有另外一个错误如下图所示
在这里插入图片描述
关键代码是 flutter/packages/flutter_tools/gradle/flutter.gradle' line: 1035,报错位置在 Flutter SDK,刚开始以该错误为关键字搜索解决方案了,然后浪费了好几个小时,这里提前提个醒。

之所以把错误原因写的这么详细,是因为如果你此时的问题和我的报错内容不一样,那就不用向下看了,我在搜索解决方案时看到了很多以为能解决的,也一个个尝试了,但没一个能解决的,着实耽误了很多时间。

如果你的报错信息和我的一样,那么请退后,因为我要开始…了。

二:问题分析

因为实在找不来解决方案,想着去 get 库的 Issues 看看有没有人遇到和我一样的问题,果然,被我找到了 Issues
在这里插入图片描述
因为我本地的 Flutter 版本是 2.2.3,方案一应该是可行的,但代价有点高,所以尝试了下面的解决方案。

三:方案一(不推荐)

根据错误原因一的提示,跳转到相应的代码处,如下图所示
在这里插入图片描述
只修改属于 get 插件的错误的代码,报 Flutter SDK 错误的先不用管,我把属于 get 插件错误的修改完后重新运行,此时没有问题,可以正常运行。

虽然这个方案可以解决,但毕竟修改了 get 插件的源码,所以并不是最理想的解决方案,接着就是下面推荐的方案二了,也是从根本上解决了这个问题。

四:方案二(推荐)

通过错误原因二,可以知道当前报错位置是插件 get-4.6.1 ,但我本地的 pubspec.yaml 文件指定的是 get 插件的 4.3.8 版本啊,如下图所示
在这里插入图片描述
查看 get 最新的版本,截至到 2022年01月13日 ,也是 get-4.6.1 版本,这肯定不是巧合。

关键是这个脱字符号 ^,我以前以为这是插件的规定写法,其实不是,它的含义是 自动使用当前插件的最新版本

因为 B 项目是几个月前的,当时 get 插件最新版本是 4.3.8,所以 B 项目没问题。

我出错的是 get 插件,用插件的 GetMaterialApp 组件代替了 Flutter 原生的 MaterialApp,Flutter 版本低,但 get 版本太高了造成了这个问题。

所以,我们把脱字符号 ^ 去掉,指定项目中用的就是 get 插件 4.3.8 版本,如下图所示
在这里插入图片描述
如果你修改后执行 flutter pub get 命令后,发现插件没有更新,这是因为插件缓存的原因,在访达中找到 get-4.6.1 文件夹,手动删除然后重新获取依赖即可。

其实从头到尾就是去掉一个脱字符号 ^ 的事情,但这是解决了才这样说,这个解决问题的过程特此记录下,希望可以帮到你。

至此,关于在 Flutter 中运行项目提示 Context: Found this candidate, but the arguments don’t match. const MaterialApp 的解决方案便介绍到这里。

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

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


结束语

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

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

猜你喜欢

转载自blog.csdn.net/qq_42351033/article/details/122484216