【问题标题】:The method 'setMockMessageHandler' isn't defined for the class 'BasicMessageChannel<dynamic>'没有为类“BasicMessageChannel<dynamic>”定义方法“setMockMessageHandler”
【发布时间】: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.

【问题讨论】:

    标签: flutter dart mobile-application flutter2.0 flutter-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】:
      1. 按住ctrl并点击进入指定类“BasicMessageChannel”
      2. 通过 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) {});
        

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

        【讨论】:

          猜你喜欢
          • 2021-11-13
          • 2020-02-15
          • 2023-01-05
          • 2021-11-19
          • 1970-01-01
          • 2021-09-02
          • 1970-01-01
          • 2019-06-24
          • 2021-01-30
          相关资源
          最近更新 更多