Flutter 我应该为集团状态使用多个类还是一个具有多个构造函数的类?

Flutter 我应该为集团状态使用多个类还是一个具有多个构造函数的类?,flutter,oop,dart,bloc,Flutter,Oop,Dart,Bloc,我最近开始学习bloc,我注意到一些教程对状态使用多个类,而其他教程只使用一个类和多个命名构造函数 多个类的示例: abstract class ProductsState {} class ProductsInitial extends ProductsState {} class ProductsLoading extends ProductsState {} class ProductsSuccess extends ProductsState { final List<P

我最近开始学习bloc,我注意到一些教程对状态使用多个类,而其他教程只使用一个类和多个命名构造函数

多个类的示例:

abstract class ProductsState {}

class ProductsInitial extends ProductsState {}

class ProductsLoading extends ProductsState {}

class ProductsSuccess extends ProductsState {
  final List<Products> products;

  ProductsSuccess(this.products);
}

class ProductsError extends ProductsState {
  final String error;

  ProductsError(this.error);
}



在我的项目中,我使用第一种方法,因为不同的状态类型是明确的,你以后可以基于它来构建你的UI,例如,
if(state is ProductsLoading){show loader}

您还可以使用冻结包()生成此类类。使用它时,您将使用不同的工厂构造函数定义单个类(类似于第二个选项),但生成的代码将支持您定义的第一个选项,例如:

@freezed
class Union with _$Union {
  const factory Union(int value) = Data;
  const factory Union.loading() = Loading;
  const factory Union.error([String message]) = ErrorDetails;
}
稍后,在UI层中,您可以使用map/maybeMap/when/maybeawhen等帮助器方法基于状态构建相应的视图,例如:

var union = Union(42);

print(
  union.when(
    (int value) => 'Data $data',
    loading: () => 'loading',
    error: (String? message) => 'Error: $message',
  ),
); // Data 42

就我而言,第一个更好,因为您不必为其他州的某些字段设置为空。我会建议您检查冻结库以了解这种情况,它更适合处理多个状态()。
var union = Union(42);

print(
  union.when(
    (int value) => 'Data $data',
    loading: () => 'loading',
    error: (String? message) => 'Error: $message',
  ),
); // Data 42