我有这个基类,应该通过VM,Flutter和Web进行通用使用:
// base.dart
abstract class Foo {
void _method();
}
void doMethod(Foo foo) {
foo._method();
}
以下是io和网络版本:
// web.dart
import 'dart:html' as html;
class Bar implements Foo {
void _method() => html.someMethod();
}
// io.dart
import 'dart:io' as io;
class Bar implements Foo {
void _method() => io.someMethod();
}
我不想将_method
暴露在包装外。
有条件的进口有可能吗?
答案 0 :(得分:1)
不。有条件进口(和出口)仅允许进出口。 零件声明不能是有条件的。
您可以做的是让_method
的实现来自顶层函数:
import "src/default.dart"
if (dart.library.io) "src/io.dart"
if (dart.library.html) "src/web.dart"
as impl;
class Foo {
factory Foo() = impl.Bar;
void _method() => impl.fooMethod(this);
}
,例如src/io.dart
可以是:
import "../foo.dart";
class Bar extends Foo {
void _barMethod() => io.something;
}
void fooMethod(Foo foo) => (foo as Bar)._barMethod();
这样,您可以将私有方法的实现抽象到一个单独的库中。