没有为类“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 upgrade
和 flutter 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 通信 )
错误:没有为类 'Utf8' 定义 getter 'addressOf'
错误:没有为类“BuildContext”定义方法“ancestorInheritedElementForWidgetOfExactType”