1

我有一个带有树的扑扑项目,看起来像

...
├── lib
│   ├── UI
│   │   ├── base_widget.dart
│   │   ├── components
│   │   │   ├── card.dart
│   │   │   ├── centered_progressIndicator.dart
│   │   │   ├── gradient_button.dart
│   │   │   └── rounded_network_image.dart
│   │   ├── more
│   │   │   ├── announcements
│   │   │   │   └── announcements.dart
│   │   │   ├── more.dart
│   ├── main.dart
├── pubspec.lock
├── pubspec.yaml
└── test
    └── widget_test.dart

announcements.dart(也在其他一些文件中)我想导入card.dart. 现在我正在导入import '../../components/card.dart';.

如果我将components目录名称更改为其他名称,我必须编辑我导入的所有文件components/card.dart

../另外,我知道不推荐使用相对导入,应该使用package:.

我的问题是如何编写不影响目录结构更改的导入语句?这在飞镖中可能吗?

4

3 回答 3

3

您绝对应该能够在您自己的包中使用相对导入(并且永远不会进入或退出包)。

也就是说,我完全不同意:

另外,我知道不推荐使用 ../ 进行相对导入,应该使用 package:。

如果重命名包含许多文件的目录,则需要重写对这些文件的所有引用。没有办法解决这个问题。如果您在文件之间使用相对路径,则重命名目录中相互引用的文件不需要更改,因为它们的导入路径不会包含更改后的名称。如果您package:在任何地方都使用 URI,那么这些也需要更改。

包外的任何package:引用(以重命名目录中的文件为目标)也需要更改,因此如果重命名目录不在 下,因此不用于直接外部访问,则重命名是一项重大更改。这就是为什么建议您将大部分源文件放入,然后从直接放置在. 只要您在公共库中导出相同的声明,就可以在 .lib/src/lib/src/lib/lib/src/

这样的重命名是一个很大的重构,如果它支持的话,让一个 IDE 帮助您重命名所有引用是一个好主意。

于 2019-05-02T05:52:39.300 回答
0

使用可以使用包导入。在项目内的“.packages”文件中添加“projectname/lib”。然后您可以执行以下“导入包:项目名称/组件/卡片”

.packages 中添加的路径将给出项目的 lib 文件夹的相对路径。

于 2020-01-15T07:27:05.110 回答
0

package:导入比相对导入更健壮,但您需要编辑器或 IDE 的帮助才能重命名库文件/目录。在 VS Code 中,您可以使用ctrl+shift+h打开项目范围的字符串替换。这是编辑器的一个常见功能,并且可能是在重命名库文件后更改导入语句的最佳方式。

如果您使用的是 VS Code,还有dart-import,这是一个扩展,用于将所有导入更改为与包相关的语法,并且还可以删除未使用的导入。

于 2019-05-01T11:21:49.267 回答