我开发了一个颤动的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
。
所以我很困惑飞镖的完整路径和相对路径之间有什么不同。
答案 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.dart
。 https://github.com/dart-lang/sdk/issues/33076
Dart始终假定入口点文件位于其他顶级目录中lib/
(例如bin/
,web/
,tool/
,example/
, ...)。
Flutter打破了这个假设。
因此,您目前不得在lib/
另见