我正在使用冻住包来创建json解析器和数据类。到目前为止,我正在使用达茨的包来创建Union,并在颤振小部件中处理它们。例如,我的一些Union类如下所示。
Either<ApiFailure,ModelA> apiResult1;
Either<ApiFailure,ModelB> apiResult2;我在颤振小部件的构建器中使用它们,方法是折叠它们,并为每个案例返回特定的小部件。例如。
return apiResul1.fold<Widget>(
(left) => ErrorWidget(),
(right) => SuccessWidget(),
);我使用冻结包创建了ApiFailure、ModelA和ModelB作为数据类。据我所知,冻结与类似的联合类支持,如dartz,我们可以定义联合案例。因此,我尝试按以下方式使用它们,并且根据我的初步理解,不可能使用已经存在的数据类来实现以下目标。ModelA andApiFailure`‘.
@freezed
abstract class ApiResult1 with _$ApiResult1{
const factory ApiResult1.modelA() = ModelA;
const factory ApiResult1.apiFailure() = ApiFailure;
}
@freezed
abstract class ApiResult2 with _$ApiResult1{
const factory ApiResult2.modelB() = ModelB;
const factory ApiResult2.apiFailure() = ApiFailure;
}注意,在上面的两个联合类中,我在ApiResult2中重新定义了ApiResult2,这正是我要避免的。
问题:是否可以利用现有的数据类型来构建一个联合类,这样我就不必为了改变ApiFailure对象的结构而进行多次更改。希望我的问题很清楚。
发布于 2021-02-04 21:09:02
为什么不使用您的数据类作为参数?
@freezed
abstract class ApiResult1 with _$ApiResult1 {
const factory ApiResult1.model(ModelA model) = _ModelA;
const factory ApiResult1.failure(ApiFailure failure) = _ApiFailure1;
}
@freezed
abstract class ApiResult2 with _$ApiResult2 {
const factory ApiResult2.model(ModelB model) = _ModelB;
const factory ApiResult2.failure(ApiFailure failure) = _ApiFailure2;
}那你就可以
return apiResult1.when(
model: (model) => SuccessWidget(),
failure: (failure) => ErrorWidget(),
);https://stackoverflow.com/questions/61117705
复制相似问题