这是【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 博客中,希望自己学习的同时,也可以帮助更多的人。