Flutter 颤振导入:相对路径还是包?
在flatter中,为了在我们自己的包的lib目录中导入库,我们应该使用相对导入吗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' 除了简洁之外还有什么区别吗?为什么软件包导入会比相对导入减少错误?提供商不再需要软件包导入 这是一个解决旧飞镖错误
导入“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:如您所愿,但请注意,建议在中使用。
首先,如中所述,提供者不再建议包导入 提供规则列表,包括一些预定义的规则集:
- 谷歌内部强制执行的规则
- 适用于与有效省道样式指南相对应的规则
- 用于颤振分析的规则
- ,在pedantic和effective_dart规则集中启用,基本上建议避免路径中有“lib”的导入
以下两个是您提到的:
- ,来自有效的\u dart规则集,与以下相反:
- ,在没有预定义规则集的情况下启用。这意味着启用它取决于您和您的首选项(注意,它与前面的规则不兼容)
我个人更喜欢使用,因为它符合Dart的指南。此外,我还使用它自动修复和排序我的导入。你是用过去时写的,这个错误现在解决了吗?但何时使用哪种导入方式的问题仍然悬而未决。是否有一个规则或最佳实践,什么时候用一种方法,什么时候用另一种方法?好的调用,特别是VSCode扩展,可以节省很多时间。