如何使用干净的架构为 flutter 中的每个屏幕提供单独的控制器

问题描述 投票:0回答:3

我正在尝试在我的 flutter 应用程序中实现 Clean Architecture。我的应用程序中有一个名为 Purchase Order 的模块。其中包含列表屏幕过滤器屏幕添加采购订单屏幕

目前,我有一个控制器(GetxController)用于所有这些。所有这些屏幕的所有业务逻辑都包含在该控制器中。没有单独的控制器的原因是这些屏幕相互依赖。

假设用户从 Filter Screen 应用过滤器,这应该更新 List Screen。同样,用户可以从列表屏幕中删除过滤器并更改一些过滤器值。

同样,如果用户添加新的采购订单,则应使用新添加的采购订单更新列表屏幕

如何按照clean架构实现多个控制器之间的通信。

flutter dart mvvm clean-architecture design-principles
3个回答
1
投票

希望你一切都好 我认为这里的问题是状态管理问题,而不是干净的架构问题。

我会用两种不同的方式来处理它:

1-具有

copyWith
状态的相同控制器: 每个屏幕上可以有 1 个控制器和 3 个监听器 该状态应保持 3 个屏幕状态 -> 还应实现
copyWith
功能
copyWith
使用以前的数据创建状态的新实例,以防您想要修改参数并保留其他参数 因此,每当您想要更新屏幕时,所有屏幕都会更新。

2- 控制器和监听器 第二个是每个屏幕都有一个单独的控制器,并且每个屏幕的构造函数上都有一个侦听器,每当控制器发生更改时,其他控制器都会收到通知。


1
投票

有一个很棒的人回答了这个问题。 https://stackoverflow.com/a/67224552/10766511

您可以使用

Get.find<FirstController>().valueFromFirstController
访问不同的控制器值

因此,在干净的架构中,您将能够将其存储在不同的包和文件中。我建议您也使用依赖注入,要实现这一点,您可以使用 get_it package


0
投票

有趣的问题。 我的建议: 使视图与控制器 1:1,即每个屏幕一个控制器。

ListScreen - ListController
FilterScreen - FilterController
PurchaseScreen -  PurchaseController

但是,只提供一项服务 -

PurchaseOrderService

在服务中实现所有需要的逻辑。让服务持久化。

向所有控制器注入服务。

不要让控制器成为永久性的。当屏幕改变时,应该调用控制器的

init

init
中从服务获取数据并更新状态。

© www.soinside.com 2019 - 2024. All rights reserved.