方法 'setMockMessageHandler' 没有为 class 'BasicMessageChannel<dynamic>' 定义

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

在运行 Flutter 项目后,我得到这个错误。我能做些什么来解决它?

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

FAILURE: Build failed with an exception.

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

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

就我而言,问题仅在全局终端会话中 运行 flutter pub upgrade 得到解决。

referred release notes

上查看有关上述转换的更多详细信息

我在 Mac

上更新 Android Studio 中的插件后遇到了同样的问题
flutter pub upgrade

对我没有任何帮助,但是

flutter clean
flutter pub upgrade --major-versions

已解决问题

我也遇到了同样的问题,以上方法都试过了,都没有用。 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.

  1. 转到指定的 class 'BasicMessageChannel' 按住 ctrl 并单击它
  2. 而不是通过 ctrl+F 搜索 'setMockMessageHandler' 比你会看到这样的东西 // 寻找 setMockMessageHandler? // 查看这个 shim 包:packages/flutter_test/lib/src/deprecated.dart 并将此行粘贴到此评论下方 void setMockMessageHandler(动态消息){

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

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

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

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

代码使用 TestDefaultBinaryMessenger 的默认实例:

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

此更改允许我保持所有测试不变。