dart中的完整路径和相对路径有什么区别

Tin*_*ino 3 dart flutter

我开发了一个Flutter应用,在“模型”包中定义了服务器模型。

然后,例如在“模型”中声明一个类Example

型号/示例.dart

class Example {
  @override
  String toString() {
    return 'class example';
  }
}
Run Code Online (Sandbox Code Playgroud)

test_a.dart

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

Example testA() {
  return Example()
}
Run Code Online (Sandbox Code Playgroud)

测试飞镖

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

test() {
  Example example = testA();
  if (example is Example) {
    print('this class is Example');
  } else {
    print('$example');
  }
}
Run Code Online (Sandbox Code Playgroud)

我会得到输出 class example

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

所以我很困惑飞镖的完整路径和相对路径之间的区别。

Gün*_*uer 7

包装进口

'package:...import可以从任何地方导入,以从导入文件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

目前与入口点文件中的已知问题lib/*lib/main.dart在颤动。https://github.com/dart-lang/sdk/issues/33076

飞镖总是假定入口点文件,可以在其他顶级目录,那么lib/(如bin/web/tool/example/,...)。Flutter打破了这个假设。因此,您当前不得在内部的入口点文件中使用相对导入lib/

也可以看看