Abh*_*ran 7 dart flutter flutter-web dartz
我正在使用冻结包来创建我的 json 解析器和数据类。到目前为止,我正在使用dartz的包来创建 Union 案例并在 Flutter 小部件中处理它们。例如,我的一些 Union 类如下所示。
Either<ApiFailure,ModelA> apiResult1;
Either<ApiFailure,ModelB> apiResult2;
Run Code Online (Sandbox Code Playgroud)
我在我的颤振小部件的构建器中使用它们,方法是折叠它们并为每种情况返回特定的小部件。例如。
return apiResul1.fold<Widget>(
(left) => ErrorWidget(),
(right) => SuccessWidget(),
);
Run Code Online (Sandbox Code Playgroud)
我使用冻结包创建了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;
}
Run Code Online (Sandbox Code Playgroud)
请注意,在上述两个工会班我重新定义ApiFailure在ApiResult2这正是我想避免的。
问题:是否可以利用现有的数据类来构建联合类,这样我就不必为了更改ApiFailure对象的结构而进行多次更改。希望我的问题很清楚。
小智 0
为什么不使用您的数据类作为参数?
@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;
}
Run Code Online (Sandbox Code Playgroud)
然后你可以做
return apiResult1.when(
model: (model) => SuccessWidget(),
failure: (failure) => ErrorWidget(),
);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
439 次 |
| 最近记录: |