Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Flutter 颤振导入:相对路径还是包?_Flutter_Dart_Flutter Provider - Fatal编程技术网

Flutter 颤振导入:相对路径还是包?

Flutter 颤振导入:相对路径还是包?,flutter,dart,flutter-provider,Flutter,Dart,Flutter Provider,在flatter中,为了在我们自己的包的lib目录中导入库,我们应该使用相对导入吗 导入“foo.dart” 还是包装进口 import'package:my_app/lib/src/foo.dart' 提倡使用相对进口: 在您自己的包的lib目录中导入库时,首选相对路径 鉴于包装上注明: 始终使用包导入。例如:import'软件包:my_app/my_code.dart' 除了简洁之外还有什么区别吗?为什么软件包导入会比相对导入减少错误?提供商不再需要软件包导入 这是一个解决旧飞镖错误

在flatter中,为了在我们自己的包的lib目录中导入库,我们应该使用相对导入吗

导入“foo.dart”
还是包装进口

import'package:my_app/lib/src/foo.dart'
提倡使用相对进口:

在您自己的包的lib目录中导入库时,首选相对路径

鉴于包装上注明:

  • 始终使用包导入。例如:
    import'软件包:my_app/my_code.dart'

除了简洁之外还有什么区别吗?为什么软件包导入会比相对导入减少错误?

提供商不再需要软件包导入

这是一个解决旧飞镖错误的方法:

TL;DR通过混合相对导入和绝对导入,有时Dart会创建类定义的副本

这导致了荒谬的路线,即:

import'package:myApp/test.dart'作为绝对值;
将“./test.dart”作为相对导入;
void main(){
打印(relative.Test().runtimeType==absolute.Test().runtimeType);//false
}
由于
provider
依赖
runtimeType
来解析对象,因此此错误使得
provider
在某些情况下无法获取对象。

从同一角度出发,他们进一步给出了相关导入的原因:

没有充分的理由选择前者——它只是更短,我们希望保持一致

就个人而言,我更喜欢绝对方法,尽管它更详细,因为这意味着当我从不同的dart文件(在其他文件夹中)导入时,我不必计算要导入的文件相对于当前文件的位置。虚构的例子:

我有两个不同文件夹级别的dart文件,需要导入
主题/style.dart

一种是
widgets/animation/box\u anim.dart
,其中相对路径导入为:

import '../../themes/style.dart';
另一个是
screens/home\u screen.dart
,具有相对导入:

import '../themes/style.dart';
这可能会让人困惑,因此我发现最好在两个文件中都使用绝对值,保持一致:

import 'package:myapp/themes/style.dart';
并且始终坚持这条规则。所以,基本上,无论您使用什么方法,一致性都是关键

该软件包也有,但更多的是关于“/lib”文件夹中混合的注意事项:

避免对lib/中的文件进行相对导入

混合相对导入和绝对导入时,可以创建 以两种不同方式导入同一成员的混淆。 避免这种情况的一个简单方法是确保没有相对导入 在其路径中包含lib/的

TL;DR:如您所愿,但请注意,建议在中使用。
首先,如中所述,提供者不再建议包导入

提供规则列表,包括一些预定义的规则集:

  • 谷歌内部强制执行的规则
  • 适用于与有效省道样式指南相对应的规则
  • 用于颤振分析的规则
进口规则 关于进口,实际上有两个以上的相反规则:

  • ,在pedanticeffective_dart规则集中启用,基本上建议避免路径中有“lib”的导入

以下两个是您提到的:

  • ,来自有效的\u dart规则集,与以下相反:

  • ,在没有预定义规则集的情况下启用。这意味着启用它取决于您和您的首选项(注意,它与前面的规则不兼容)

我应该选择哪一个? 选择你想要的规则!它不会导致任何性能问题,并且没有任何规则会比其他规则减少错误。多亏了Dart linter,只需选择一个,就可以使导入内容在整个项目中保持一致


我个人更喜欢使用,因为它符合Dart的指南。此外,我还使用它自动修复和排序我的导入。

你是用过去时写的,这个错误现在解决了吗?但何时使用哪种导入方式的问题仍然悬而未决。是否有一个规则或最佳实践,什么时候用一种方法,什么时候用另一种方法?好的调用,特别是VSCode扩展,可以节省很多时间。