Ffltter-如何在平台(Android、iOS、Web)上使用条件编译? [英] Flutter - How use conditional compilation for platform (Android, iOS, Web)?
本文介绍了Ffltter-如何在平台(Android、iOS、Web)上使用条件编译?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我正在Fighter中创建一个移动应用程序。现在我有一个问题,对于一个平台,我会使用另一个插件,我需要编写我的平台代码(插件的实现不适合)。
我看到了几种解决方案:
最好创建多个项目,并在其中使用条件编译和共享文件。我在Visual Studio中使用了这项技术。但我现在用的是安卓工作室。没有项目文件,只有文件夹。
还有一个条件编译支持的问题。我发现这个article,条件编译非常有限。
创建您自己的插件并充分使用它。但它的劳动密集度更高。
你有什么建议,或许还有第三条路?
推荐答案
使用多个环境(例如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屋!
查看全文