我有这个基类,应该通过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
有条件进口有可能吗?

最佳答案

不可以。有条件的进口(和导出)仅适用于 import/export 。
零件声明不能是有条件的。
您可以做的是让_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();
这样,您可以将私有(private)方法的实现抽象到一个单独的库中。

08-06 06:51
查看更多