【问题标题】:Handling mobile only plugins on Flutter web platform gracefully优雅地处理 Flutter web 平台上的移动端插件
【发布时间】:2020-07-21 08:26:16
【问题描述】:

我注意到 Flutter web(仍处于测试阶段)不支持诸如 path_providerfirebase_messaginggoogle_fonts 之类的 Flutter 插件。谁能提供一些有关如何在受支持的平台上使用此插件的见解,并防止他们在不受支持的平台上破坏应用程序?

  • 在不受支持的平台上,是否有任何标准或记录在案的方法可以优雅地处理插件?
  • 在为不受支持的平台构建时,是否可以从 pubspec 中排除插件,可能正在使用某种包装器?
  • 在为 Web 构建时,带有一些 dart 插件的 Android 或 iOS 原生代码会发生什么情况?

【问题讨论】:

    标签: flutter flutter-web


    【解决方案1】:

    您可以通过条件导入来完成此操作。 This answer 提供了一个很好的方法来做到这一点。以下是该帖子的要点:

    核心思想如下。

    1. 创建一个抽象类来定义您通常需要使用的方法。
    2. 创建特定于 webandroid 依赖项的实现,以扩展此抽象类。
    3. 创建一个存根,它公开一个方法以返回此抽象实现的实例。这只是为了让飞镖分析工具满意。
    4. 在抽象类中导入此存根文件以及特定于mobileweb 的条件导入。然后在其工厂构造函数中返回具体实现的实例。如果编写正确,这将通过条件导入自动处理。

    此方法允许您基于平台进行这些导入,并适用于所有可能不支持所有可能的 Flutter 平台的包(例如 dart:html、dart:js、dart:js_util、dart:io)。这似乎是目前使用相同代码库处理不同平台的最佳方式。

    据我所知,您不能有条件地从 pubspec.yaml 中排除插件(我当然可能错了),尽管对于我之前提到的条件导入来说这不是必需的。

    当您为 Web 构建时,作为您使用的插件一部分的任何原生 Android 或 iOS 代码根本不包括在内。对于 Android 和 iOS 来说,这完全一样。在为 Android 构建时,构建应用程序时根本不考虑 iOS 代码。构建一个颤振应用程序只编译飞镖代码。除了构建本机应用程序之外,它对本机代码没有任何特别之处。

    【讨论】:

      猜你喜欢
      • 2011-08-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-10
      • 2011-09-03
      • 1970-01-01
      • 2017-06-02
      • 2011-11-26
      相关资源
      最近更新 更多