我正在制作一个Flutter应用程序,并且为我使用的每个自定义小部件创建了一个文件/类。然后,我将所有这些文件导入主屏幕,但是我不喜欢它的外观。特别是因为如果我想添加另一个小部件或删除一个小部件,则需要弄乱导入内容。
是否存在类似C#命名空间的东西,我可以对文件夹/命名空间中的所有文件进行一次导入?
我已经尝试成功使用库/零件,但是在https://www.dartlang.org/guides/libraries/create-library-packages中说应该避免使用零件/零件。那么,我们应该导入每个文件吗?
代替:
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';
答案 0 :(得分:3)
是的,您可以使用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
,所有这些小部件都将对您可用。
检查一下,所有解释在这里:Dart: Organizing a library package
更新:
在Dart中,没有namespaces
像大多数其他语言一样。
Dart使用libraries
进行封装,隐藏数据。
将类导入代码的唯一方法是在文件的开头使用import,该文件也应该是一个库。
我对此也有疑问。想象一下您想动态导入库的情况。假设您要在应用程序中实现MVC pattern
,如果要在服务器上执行此操作,则将有一个Router class
可以分析URL并确定要实例化的Controller class
和实例Method
从该控制器进行调用。现在,每个URL都会触发不同的Controller,而您事先并不知道它,这取决于您的路由器来检测要实例化的类。在这种情况下,您需要执行的操作是导入每个可能在文件开头实例化的Controller。我对此有疑问。如果您的应用程序变大并且必须导入,比如说20个Controller类,那么Router / Dispatcher可以调用其中之一,而实际上,您将仅调用一个Controller,因为每个URL仅包含Controller。
如果要使用库,则手动加载不会有问题,但是对于如上所述的情况,Dart会失败,因为没有“自动加载”类,例如在PHP中,您可以使用使用命名空间的自动加载程序来查找类的位置,并在代码中间动态实例化一个类。
答案 1 :(得分:0)
此VSCode扩展可以帮助创建此扩展。