flutter - 我应该在何时何地将值存储在BLoC本身或其状态中

标签 flutter dart architecture bloc state-management

语境
我来自Redux,正在学习全局状态管理的BLoC模式。我在定义将值存储在BLoC类内部的位置以及何时在州内存储值时遇到麻烦。
用例
我有一个主页,在其中显示一些广告,具体取决于其类别(category绝不能为null)。我实现了一个AdsBloc,如下所示:

class AdsBloc extends Bloc<AdsEvent, AdsState> {
  final AdsRepository repository;
  AdsBloc({@required this.repository})
      : super(AdsInitial(category: Category.DOGS));

  @override
  Stream<AdsState> mapEventToState(
    AdsEvent event,
  ) async* {
    // my code
  }
}
这些是我的AdsState:
abstract class AdsState {
  final Category category;
  AdsState({this.category});
}

class AdsInitial extends AdsState {
  AdsInitial({category}) : super(category: category);
}

class AdsSuccess extends AdsState {
  final PaginatedAds paginatedAds;
  AdsSuccess({this.paginatedAds, category}) : super(category: category);
}

class AdsFailure extends AdsState {
  AdsFailure({category}) : super(category: category);
}
问题
由于实现方式的方式不同,每次更改状态时都需要传递category
解?
因此,我在考虑是否可以将category属性视为AdsBloc并将其从状态中删除,这样我就可以更好地控制此属性。

最佳答案

将“类别”实现为触发广告加载过程的事件的参数。例如,通过这种方式,您将告诉BLoC使用“category:Category.DOGS”来“LoadAds”。

class LoadAds extends AdsEvent {
  final Category category;
  
  LoadAds({
    @required this.category,
  });

  @override
  List<Object> get props => [category];
}
这样,您将可以在需要时使用单个bloc实例加载不同的广告类型。首先加载DOGS,2分钟后加载CATS,而不是狗。
如果您不需要此功能,则在bloc本身中定义类别非常好。

关于flutter - 我应该在何时何地将值存储在BLoC本身或其状态中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63359509/

相关文章:

ios - Flutter Firebase Auth with Apple 不会注销

animation - FadeTransition() 小部件在 flutter 中仅动画一次?

node.js - (Flutter) Paytm 支付网关集成

architecture - 在哪里记录 arc42 中的数据库模式?

.NET 应用程序体系结构 - 哪个是此类的最佳程序集?

flutter 驱动: How to check device orientation?

java - 在 Flutter 中向特定于平台的代码添加依赖项

server - Flutter:无需等待服务器响应即可处置 Bloc

flutter - Flutter:为什么内容替换列表中的值而不是添加到列表中?

java - 具有静态方法的辅助类工厂?