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

有没有类似C#命名空间的东西,我可以只对文件夹/命名空间中的所有文件进行一次导入?

我已经成功地try 了使用library/part,但在《https://www.dartlang.org/guides/libraries/create-library-packages》中,我说我应该避免使用part/part.那么,我们需要导入每个文件吗?

而不是:

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/)中,然后在libs/中创建文件custom_widgets.dart,并在custom_widgets.dart中使用export,如下所示:

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';

一旦您达到importcustom_widgets.dart,所有这些小部件都将可供您使用.

看看这个,这里都解释了:Dart: Organizing a library package

更新:

在DART中,没有像大多数其他语言那样的namespaces个. DART使用libraries进行封装、数据隐藏. 将类导入到代码中的唯一方法是在文件的开头使用IMPORT,该文件也应该是一个库.

我对此也有意见.想象一下您想要动态导入库的情况.假设您想要在您的应用程序中实现MVC pattern,如果您在服务器上执行此操作,您将拥有一个Router class,它将分析URL并决定实例化哪个Controller class,调用该控制器中的哪个Method.现在每个URL都会触发不同的控制器,而您事先并不知道,这取决于您的路由来检测要实例化的类.在这种情况下,您需要做的是导入可能在文件开头实例化的每个控制器.我对此有意见.如果您的应用程序变得很大,并且您必须导入(比方说)20个Controller类,这样Router/Dispatcher就可以调用其中的一个类,而实际上您将只调用一个Controller,因 for each URL只有一个Controller.

如果要使用库,手动加载库不会有问题,但是对于如上所述的情况,DART会失败,因为没有像在PHP中那样的"自动加载"类,在PHP中,您可以使用使用命名空间的自动加载器来找出类的位置,并在代码中间动态实例化一个类.

Flutter相关问答推荐

悬停时打开Flutter 下拉按钮

Flutter OpenID Connect无效参数:redirect_uri using Keycloak

在 flutter 吧蜂巢中拯救主题

集装箱堆放和定位时的高度问题

我如何在Android 13中通过Flutter应用程序打开文件(不是图像、视频或音频)?

如何手动将 FirebaseAuth 用户邮箱验证状态设置为 true

Flutter 中的区域不匹配

如何从Firebase登录获取用户信息,如电话号码、出生日期和性别

Flutter列顶部和底部出现不必要的边距问题

如果不刷新页面,我看不到从 Firestore 中提取的数据

如何删除图像边框半径与其父容器边框半径之间的空白

使用 Riverpod 和 copyWith 方法更新数据类中列表中变量的值

如何将 chrome web 模拟器添加到 vs code

如何从 Flutter Slider Widget 中移除发光效果?

Flutter 构建方法使用的是旧版本的变量?

通过点击缩略图加载全屏图像

Flutter 如何要求用户在应用程序中设置电话密码?

Flutter Desktop,如何获取windows用户配置文件名称?

Flutter 小部件中的视图和逻辑分离

如何从 Dart 中的两个不同列表创建公共元素列表?