如何避免在dart/FLATTER中为每个文件编写导入?

如何避免在dart/FLATTER中为每个文件编写导入?,dart,flutter,Dart,Flutter,我正在制作一个颤振应用程序,并为我使用的每个自定义小部件创建了一个文件/类。然后,我将所有这些文件导入主屏幕,但我不喜欢它的外观。特别是如果我想添加另一个小部件或删除一个小部件,我需要处理导入 是否有类似于C#名称空间的东西,我可以只为文件夹/名称空间中的所有文件进行一次导入 我已经成功地尝试了使用库/部件,但in说我应该避免使用的部件/部件。那么,我们需要导入每个文件吗 而不是: import 'package:custom_widgets/custom_multiplechoice.dart

我正在制作一个颤振应用程序,并为我使用的每个自定义小部件创建了一个文件/类。然后,我将所有这些文件导入主屏幕,但我不喜欢它的外观。特别是如果我想添加另一个小部件或删除一个小部件,我需要处理导入

是否有类似于C#名称空间的东西,我可以只为文件夹/名称空间中的所有文件进行一次导入

我已经成功地尝试了使用库/部件,但in说我应该避免使用的部件/部件。那么,我们需要导入每个文件吗

而不是:

import 'package:custom_widgets/custom_multiplechoice.dart';
import 'package:custom_widgets/custom_singlechoice.dart';
import 'package:custom_widgets/custom_time.dart';
import 'package:custom_widgets/custom_yesnochoice.dart';
import 'package:custom_widgets/custom_date.dart';
我希望:

import 'package:custom_widgets';

是的,您可以使用
导出
实现您想要的

您可以将所有小部件放在一个文件夹中,例如
libs/src/
,然后在
libs/
中创建文件
custom\u小部件.dart
,并在
custom\u小部件中使用
导出
,如下所示

export 'src/custom_multiplechoice.dart';
export 'src/custom_singlechoice.dart';
export 'src/custom_time.dart';
export 'src/custom_widgets/src/custom_yesnochoice.dart';
export 'src/custom_date.dart';
一旦您
导入
自定义小部件.dart
,您将可以使用所有这些小部件

看看这个,这里都有解释:

更新:

Dart中没有与大多数其他语言类似的
名称空间。
Dart使用
进行封装和数据隐藏。 将类导入代码的唯一方法是在文件的开头使用import,该文件也应该是一个库

我对此也有意见。设想一种情况,您希望动态导入库。假设您希望在应用程序中实现
MVC模式
,如果您在服务器上执行此操作,您将拥有一个
Router类
,该类将分析URL并决定要实例化的
控制器类
,以及要从该控制器调用的
方法。现在,每个URL都会触发不同的控制器,而您事先并不知道,由您的路由器来检测要实例化的类。在这种情况下,您需要做的是导入每个可以在文件开头实例化的控制器。我对此有意见。如果您的应用程序变大,您必须导入20个控制器类,这样路由器/调度器就可以调用其中一个,而实际上您将只调用一个控制器,因为每个URL只有一个控制器


如果要使用库,则手动加载库不会有问题,但对于上述情况,Dart会失败,因为没有像PHP这样的类的“自动加载”,在这里您可以使用使用名称空间的自动装入器来查找类的位置并动态地在代码中间实例化类。 VSCode有一个扩展,可以帮助创建此扩展


所以请使用
从您发布的链接导出…
!谢谢你的回答。所以无论发生什么,我都必须列出文件?我是否可以在每个文件中放入一些东西,将它们分组到“自定义_小部件”(如c#中的名称空间声明)中?理想情况下,我不想在添加新的小部件时处理额外的文件。不幸的是,现在看来我们必须导入我们想要使用的每个类。没有办法像您描述的那样使用名称空间,我也认为这是一个问题。我正在寻找一种方法来导入给定文件夹中的所有库,但这是不可能的。这对我来说是个问题,因为如果您需要在代码中间动态地导入库,那该怎么办呢?如果在库开始时没有导入该库,那么以后就不能导入并实例化类。Dart中有“延迟加载”,但每个库都必须导入。