当使用多个环境(例如 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
这是在编译时实际解决的问题(stubbing) 向右myPluginMethod()
method.
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
}
其他官方替代方案可能会通过创建共享相同界面的单独项目来实现。这就像 Flutter 团队一直在为他们的 web + io 插件所做的那样,从而产生一个可以与多个项目捆绑在一起的项目:
- my_plugin_io
- my_plugin_web
- my_plugin_desktop
- my_plugin_interface
可以找到一篇很好的文章来解释这一点here https://medium.com/flutter/how-to-write-a-flutter-web-plugin-part-2-afdddb69ece6.
刚刚在 SO 中输入它,所以如果我有一些拼写错误,我很抱歉,但你应该很容易在编辑器上找到它。