我正在尝试在我的 flutter 应用程序中实现 Clean Architecture。我的应用程序中有一个名为 Purchase Order 的模块。其中包含列表屏幕、过滤器屏幕、添加采购订单屏幕。
目前,我有一个控制器(GetxController)用于所有这些。所有这些屏幕的所有业务逻辑都包含在该控制器中。没有单独的控制器的原因是这些屏幕相互依赖。
假设用户从 Filter Screen 应用过滤器,这应该更新 List Screen。同样,用户可以从列表屏幕中删除过滤器并更改一些过滤器值。
同样,如果用户添加新的采购订单,则应使用新添加的采购订单更新列表屏幕
如何按照clean架构实现多个控制器之间的通信。
希望你一切都好 我认为这里的问题是状态管理问题,而不是干净的架构问题。
我会用两种不同的方式来处理它:
1-具有
copyWith
状态的相同控制器:
每个屏幕上可以有 1 个控制器和 3 个监听器
该状态应保持 3 个屏幕状态 -> 还应实现 copyWith
功能
copyWith
使用以前的数据创建状态的新实例,以防您想要修改参数并保留其他参数
因此,每当您想要更新屏幕时,所有屏幕都会更新。
2- 控制器和监听器 第二个是每个屏幕都有一个单独的控制器,并且每个屏幕的构造函数上都有一个侦听器,每当控制器发生更改时,其他控制器都会收到通知。
有一个很棒的人回答了这个问题。 https://stackoverflow.com/a/67224552/10766511
您可以使用
Get.find<FirstController>().valueFromFirstController
访问不同的控制器值
因此,在干净的架构中,您将能够将其存储在不同的包和文件中。我建议您也使用依赖注入,要实现这一点,您可以使用 get_it package
有趣的问题。 我的建议: 使视图与控制器 1:1,即每个屏幕一个控制器。
ListScreen - ListController
FilterScreen - FilterController
PurchaseScreen - PurchaseController
但是,只提供一项服务 -
PurchaseOrderService
在服务中实现所有需要的逻辑。让服务持久化。
向所有控制器注入服务。
不要让控制器成为永久性的。当屏幕改变时,应该调用控制器的
init
。
在
init
中从服务获取数据并更新状态。