22

运行 Flutter 项目后,出现此错误。我能做些什么来解决它?

Error: The method 'setMockMessageHandler' 
isn't defined for the class 'BasicMessageChannel<dynamic>'.

FAILURE: Build failed with an exception.
4

5 回答 5

31

在 Mac 上的 AndroidStudio 中更新插件后我遇到了同样的问题

flutter pub upgrade

没有为我做任何事,但是

flutter clean
flutter pub upgrade --major-versions

解决了问题

于 2021-06-30T09:02:35.403 回答
2
  1. 按住 ctrl 转到指定的类“BasicMessageChannel”并单击它
  2. 比通过 ctrl+F 搜索“setMockMessageHandler”比你会看到这样的东西 // 寻找 setMockMessageHandler? // 查看这个 shim 包:packages/flutter_test/lib/src/deprecated.dart 并将此行粘贴到此注释下方 void setMockMessageHandler(dynamic message){

但这只是简单的 hack,不推荐

于 2021-10-27T12:40:48.530 回答
2

我今天遇到了同样的问题。

据我所知,这基本上是由平台通道测试接口转换到 flutter_test 包引起的重大变化。

flutter pub upgrade就我而言,仅在全局终端会话上运行即可解决问题。

在引用的发行说明中查看有关上述转换的更多详细信息

于 2021-06-21T04:24:07.767 回答
1

我有同样的问题,我已经尝试了以上所有方法并没有帮助。 flutter pub upgradeflutter pub upgrade --major-versions输出:

没有依赖项改变。

1 包已停产。

76 个软件包具有与依赖约束不兼容的较新版本。

尝试flutter pub outdated了解更多信息。

pubspec.yaml 没有变化!这些插件advance_pdf_viewer, flutter_absolute_path, geocoder, google_api_headers, onesignal_flutter使用了已弃用的 Android 嵌入版本。为避免意外的运行时失败或未来的构建失败,请尝试查看这些插件是否支持 Android V2 嵌入。否则,请考虑删除它们,因为 Flutter 的未来版本将删除这些已弃用的 API。如果您是插件作者,请查看将插件迁移到 V2 嵌入的文档: https ://flutter.dev/go/android-plugin-migration 。

于 2021-09-19T15:55:43.393 回答
1

升级到 Flutter 2.5.3(从 2.2.3)后遇到这个问题。发布说明中概述的更改破坏了数百个测试,因为setUp()大多数测试的模拟方法处理程序都设置在全局中。

如发行说明中所示,我将代码替换为

 MethodChannel('channelName')
   .setMockMethodCallHandler((MethodCall methodCall) {});

使用以下默认实例的代码TestDefaultBinaryMessenger

 TestDefaultBinaryMessengerBinding.instance.defaultBinaryMessenger
   .setMockMethodCallHandler(MethodChannel('channelName'), (MethodCall methodCall) {});

此更改使我能够保持所有测试不变。

于 2021-11-09T09:54:42.900 回答