Dart是否可以使用条件导入和部分导入?

时间:2020-09-25 12:57:37

标签: dart dart-conditional-import

我有这个基类,应该通过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暴露在包装外。

有条件的进口有可能吗?

1 个答案:

答案 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();

这样,您可以将私有方法的实现抽象到一个单独的库中。