飞镖中的完整路径和相对路径之间有什么不同

时间:2018-06-07 04:18:50

标签: dart flutter

我开发了一个颤动的app,在'model'包中定义了几个模型。

然后我在'model'中声明了一个类 Example ,例如。

模型/ example.dart

class Example {
  @override
  String toString() {
    return 'class example';
  }
}

test_a.dart

import 'package:example/model/example.dart'

Example testA() {
  return Example()
}

test.dart

import 'model/example.dart'
import 'test_a.dart'

test() {
  Example example = testA();
  if (example is Example) {
    print('this class is Example');
  } else {
    print('$example');
  }
}

我会得到输出class example

如果我在test.dart中从import 'model/example.dart'更改为import 'package:example/model/example.dart',那么我将获得输出this class is Example

所以我很困惑飞镖的完整路径和相对路径之间有什么不同。

1 个答案:

答案 0 :(得分:5)

包导入

'package:...从任何地方导入工作,以从lib/*导入文件。

相对进口

相对导入始终相对于导入文件。 如果lib/model/test.dart导入'example.dart',则会导入lib/model/example.dart

如果要从test/model_tests/fixture.dart中的任何文件导入test/*,则只能使用相对导入,因为包导入始终为lib/

这也适用于所有其他非lib/顶级目录,例如drive_test/example/tool/,...

<强> LIB / main.dart

目前Flutter中的lib/*中的入口点文件存在已知问题,例如lib/main.darthttps://github.com/dart-lang/sdk/issues/33076

Dart始终假定入口点文件位于其他顶级目录中lib/(例如bin/web/tool/example/, ...)。 Flutter打破了这个假设。 因此,您目前不得在lib/

中的入口点文件中使用相对导入

另见