没有为类“BasicMessageChannel<dynamic>”定义方法“setMockMessageHandler”

Posted

技术标签:

【中文标题】没有为类“BasicMessageChannel<dynamic>”定义方法“setMockMessageHandler”【英文标题】:The method 'setMockMessageHandler' isn't defined for the class 'BasicMessageChannel<dynamic>' 【发布时间】:2021-08-27 02:34:48 【问题描述】:

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

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

FAILURE: Build failed with an exception.

【问题讨论】:

【参考方案1】:

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

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

在我的情况下,只需在全局终端会话上运行 flutter pub upgrade 即可解决问题。

在referred release notes上查看有关上述转换的更多详细信息

【讨论】:

【参考方案2】:

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

flutter pub upgrade

没有为我做任何事,但是

flutter clean
flutter pub upgrade --major-versions

已经解决了问题

【讨论】:

这个解决方案在 Windows 中对我有用。谢谢。 我不想更新我的所有依赖项。如何确定需要升级的具体依赖项? 救命稻草!谢谢:D 这在 Mac 上对我不起作用。任何特定于 Mac 的步骤?【参考方案3】:

我有同样的问题,我已经尝试了以上所有方法,但没有帮助。 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 V2 嵌入。否则, 考虑删除它们,因为 Flutter 的未来版本将删除这些已弃用的 API。 如果您是插件作者,请查看将插件迁移到 V2 嵌入的文档: https://flutter.dev/go/android-plugin-migration.

【讨论】:

那么解决办法是什么? 我也有同样的问题,只是解释了我做了什么,还是不行【参考方案4】:
    按住ctrl并点击进入指定类“BasicMessageChannel” 通过 ctrl+F 搜索“setMockMessageHandler” 你会看到这样的东西 // 寻找 setMockMessageHandler? // 查看这个 shim 包:packages/flutter_test/lib/src/deprecated.dart 并将此行粘贴到此评论下方 void setMockMessageHandler(动态消息)

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

【讨论】:

【参考方案5】:

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

如发行说明中所示,我替换了类似的代码

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

代码使用TestDefaultBinaryMessenger的默认实例:

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

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

【讨论】:

以上是关于没有为类“BasicMessageChannel<dynamic>”定义方法“setMockMessageHandler”的主要内容,如果未能解决你的问题,请参考以下文章

FlutterFlutter 混合开发 ( Flutter 与 Native 通信 | Android 端实现 BasicMessageChannel 通信 )

没有为类“对象”定义运算符“[]”。扑

没有为类定义 getter 'Timer'

错误:没有为类 'Utf8' 定义 getter 'addressOf'

没有为类 RCTMap 定义视图管理器

错误:没有为类“BuildContext”定义方法“ancestorInheritedElementForWidgetOfExactType”