我正在制作一个颤动的应用程序,我为我正在使用的每个自定义小部件创建了一个文件/类。然后,我将所有这些文件导入主屏幕,但我不喜欢它的样子。特别是因为如果我想添加另一个小部件或删除一个小部件我需要摆弄导入。
有没有类似C#名称空间的东西,我可以只对文件夹/名称空间中的所有文件进行一次导入?
我已经尝试使用库/部件成功但是然后在https://www.dartlang.org/guides/libraries/create-library-packages说我应该避免使用part / partof。那么,我们是否希望导入每个文件?
而不是:
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';
是的,你可以使用export
来实现你想要的。
您可以将所有小部件放在一个文件夹中,例如libs/src/
,然后在custom_widgets.dart
中创建文件libs/
并在export
中使用custom_widgets.dart
:
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';
一旦你import
custom_widgets.dart
,所有这些小部件将可供您使用。
看看这个,这里都解释了:qazxsw poi
更新:
在达特,大多数其他语言都没有Dart: Organizing a library package。 Dart使用namespaces
进行封装,数据隐藏。将类导入代码的唯一方法是在文件的开头使用import,它也应该是一个库。
我也有这个问题。想象一下您想要动态导入库的情况。假设您想在应用程序中实现libraries
,如果您在服务器上执行此操作,您将拥有一个MVC pattern
来分析URL并确定要实例化的Router class
以及从该Controller调用的Controller class
。现在每个URL都会触发不同的Controller,而你事先并不知道它,它由你的Router来检测一个要实例化的Class。在这种情况下,您需要做的是导入每个可以在文件开头实例化的Controller。我有这个问题。如果您的应用程序变大并且您必须导入,那么假设20个Controller类,只是因此Router / Dispatcher可以调用其中一个,并且实际上您将只调用一个Controller,因为每个URL只有Controller。
没有手动加载库的问题,如果要使用它们,但是对于上述情况,Dart失败,因为没有类似PHP的类的“自动加载”,在那里你可以使用自动加载器使用命名空间来查找类的位置并动态地在代码中间实例化一个类。