0

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

梳理这两部分的文档有点稀疏。

查看 video_player 示例(https://github.com/flutter/plugins/tree/master/packages/video_player/video_player_platform_interface)似乎建议使用联合模型,因为 Web 平台是独立的。

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

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

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

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

4

2 回答 2

2

将 iOS 和 Android 项目放在主包中是目前的标准。我看起来有关于在运行时生成联合插件的讨论flutter create

有一篇关于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_ios, my_plugin_android,my_plugin_macos等。

希望这有点用。

于 2020-09-24T05:18:15.483 回答
1

为什么video_playerandroid 和 iOS 代码不联合?

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

它似乎是:

  • 方便:将使用flutter createandroid/ios 样板轻松创建包
  • 历史文物:他们可能在联合插件发布之前创建了包。(这就是为什么人们要求颤振创建插件模板自动生成一个联合插件)。

正确的包结构

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

它们可以分离出来。

具体来说,对于 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

于 2021-12-11T15:27:22.400 回答