Ffltter-如何在平台(Android、iOS、Web)上使用条件编译? [英] Flutter - How use conditional compilation for platform (Android, iOS, Web)?

查看:17
本文介绍了Ffltter-如何在平台(Android、iOS、Web)上使用条件编译?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在Fighter中创建一个移动应用程序。现在我有一个问题,对于一个平台,我会使用另一个插件,我需要编写我的平台代码(插件的实现不适合)。

我看到了几种解决方案:

  1. 最好创建多个项目,并在其中使用条件编译和共享文件。我在Visual Studio中使用了这项技术。但我现在用的是安卓工作室。没有项目文件,只有文件夹。

    还有一个条件编译支持的问题。我发现这个article,条件编译非常有限。

  2. 创建您自己的插件并充分使用它。但它的劳动密集度更高。

    你有什么建议,或许还有第三条路?

推荐答案

使用多个环境(例如IO和Web)添加存根类以在编译时解析依赖项可能很有用,这样,您就可以轻松地集成多个依赖于平台的库,而不会影响每个库的编译。

例如,可以按照以下方式构建插件:

- my_plugin_io.dart
- my_plugin_web.dart
- my_plugin_stub.dart
- my_plugin.dart

让我们用一个简单的例子来分析它:

my_plugin.dart

在这里,您实际上可以让插件的类跨多个项目使用(即。环境)。

import 'my_plugin_stub.dart'
    if (dart.library.io) 'my_plugin_io.dart'
    if (dart.library.html) 'my_plugin_web.dart';

class MyPlugin {

  void foo() {
     var bar = myPluginMethod(); // it will either resolve for the web or io implementation at compile time
  }
}

my_plugin_stub.dart

这是将在编译时(存根)实际解析到右侧myPluginMethod()方法的内容。

Object myPluginMethod() {
  throw UnimplementedError('Unsupported');
}

然后创建平台实现

my_plugin_web.dart

import 'dart:html' as html;

Object myPluginMethod() {
  // Something that use dart:html data for example
}

my_plugin_io.dart

import 'dart:io';

Object myPluginMethod() {
  // Something that use dart:io data for example
}

其他官方替代方案可能来自创建共享相同界面的独立项目。这就像Ffltter团队为他们的Web+io插件所做的那样,导致一个项目可以与多个项目捆绑在一起:

- my_plugin_io
- my_plugin_web
- my_plugin_desktop
- my_plugin_interface

可以找到一篇解释这一点的好文章here

只是在这里输入了它,所以如果我有一些拼写错误,我很抱歉,但您应该很容易在编辑器上找到它。

这篇关于Ffltter-如何在平台(Android、iOS、Web)上使用条件编译?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆