【问题标题】:Using dart pigeon in a federated model在联合模型中使用飞镖鸽
【发布时间】:2020-09-24 00:28:34
【问题描述】:

我正在考虑使用 pigeon 将 dart 包 (https://pub.dev/packages/sounds) 转换为联合模型。

关于结合这两部分的文档有点稀疏。

查看 video_player 示例 (https://github.com/flutter/plugins/tree/master/packages/video_player/video_player_platform_interface) 似乎暗示了一个联合模型,因为网络平台是独立的。

然而,android 和 ios 包都是主包的一部分。

这只是一个历史文物还是 ios 和 android 包仍然需要成为主插件的一部分?

如果可以将它们分开,那么正确的包结构是什么?

那么是否有任何在完全联合模型中使用 pigeon 的开源插件可以用作样本?

【问题讨论】:

    标签: dart plugins federated-learning


    【解决方案1】:

    在主包中包含 iOS 和 Android 项目是目前的标准。我看起来在运行 flutter create 时生成联合插件周围有 discussion

    有一篇关于url_launcher联邦插件模型重构的文章有助于搞清楚FS结构:

    https://medium.com/flutter/how-to-write-a-flutter-web-plugin-part-2-afdddb69ece6

    https://github.com/flutter/plugins/tree/master/packages/url_launcher

    就 Pigeon 而言,由于 Pigeon 处于预发布阶段并且联合插件设计相当新,我怀疑是否有任何完全联合的开源软件包使用 Pigeon。但是,您的消息规范似乎将归 my_plugin_platform_interface 包所有,并且生成的代码将被复制到您的平台特定包中,例如my_plugin_iosmy_plugin_androidmy_plugin_macos

    希望对你有用。

    【讨论】:

      【解决方案2】:

      为什么video_player的android和iOS代码没有联合?

      这只是一个历史文物还是 ios 和 android 包仍然需要成为主插件的一部分?

      它似乎是:

      • 方便flutter create 将使用 android/ios 样板轻松创建包
      • 历史文物:他们可能在联合插件发布之前创建了包。 (这就是人们要求 Flutter 创建插件模板自动生成联合插件的原因。

      正确的包结构

      如果可以将它们分开,那么正确的包结构是什么?

      它们可以分开。

      具体来说,对于 pigeon,您可以将 Dart 生成的代码(来自 Pigeon)放在您的平台特定界面中,并将您的 Native 平台生成的代码(来自 Pigeon)放在您的平台特定包中。

      在您的平台特定包中,您应该将其声明为联合插件(参见docsurl_launcher),其中url_launcher 是该示例中面向应用的包:

      flutter:
        plugin:
          implements: url_launcher
          platforms:
            macos:
              pluginClass: UrlLauncherPlugin
              fileName: url_launcher_macos.dart
      

      示例包

      如果你看看url_launcher,所有平台都有联合插件包。

      为什么要联合

      创建单独的平台特定包的优点是用户可以覆盖默认实现。对于 video_player,用户无法覆盖 Android 或 iOS 实现,因为它位于面向应用的包中。

      更多阅读

      在写完上面的内容后,我发现了这个 GitHub 问题,它解决了我们很多问题:https://github.com/woodemi/quick_flutter.brick/issues/22

      【讨论】:

        猜你喜欢
        • 2020-01-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-11-28
        • 2022-11-10
        • 2022-11-15
        相关资源
        最近更新 更多