gpt4 book ai didi

flutter - 在 Freezed 中,是否可以从现有的卡住数据类创建联合案例

转载 作者:行者123 更新时间:2023-12-03 13:29:18 27 4
gpt4 key购买 nike

我正在使用 freezed包来创建我的 json 解析器和数据类。截至目前,我正在使用 dartz的包来创建联合案例并在 Flutter 小部件中处理它们。例如,我的一些 Union 类如下所示。

Either<ApiFailure,ModelA> apiResult1;
Either<ApiFailure,ModelB> apiResult2;

我在我的 flutter 小部件的构建器中使用它们,方法是折叠它们并为每种情况返回特定的小部件。例如。

return apiResul1.fold<Widget>(
(left) => ErrorWidget(),
(right) => SuccessWidget(),
);

我创建了 ApiFailure , ModelA , 和 ModelB作为使用卡住包的数据类。我知道卡住带有类似的联合类支持,例如 dartz,我们可以在其中定义联合案例。因此,我尝试按如下方式使用它们,并且根据我的初步理解,使用现有的数据类无法实现以下目标,例如。 ModelA and ApiFailure`。

@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;
}


请注意,在上述两个联合类中,我重新定义了 ApiFailureApiResult2这是我想要避免的。

问题 : 是否可以利用现有的数据类来构建联合类,这样我就不必为了更改 ApiFailure 的结构而进行多次更改目的。希望我的问题很清楚。

最佳答案

为什么不使用您的数据类作为参数?

@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(),
);

关于flutter - 在 Freezed 中,是否可以从现有的卡住数据类创建联合案例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61117705/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com