Я использую freezed для создания моих json парсеров и классов данных. На данный момент я использую пакет dartz для создания случаев Union и обработки их в виджетах Flutter. Например, некоторые из моих классов Union выглядят следующим образом:
Either<ApiFailure,ModelA> apiResult1;
Either<ApiFailure,ModelB> apiResult2;
, и я использую их в конструкторе своего виджета флаттера, складывая их и возвращая указанный виджет c для каждого случая. Например.
return apiResul1.fold<Widget>(
(left) => ErrorWidget(),
(right) => SuccessWidget(),
);
Я создал ApiFailure
, ModelA
и ModelB
как классы данных, используя заблокированный пакет. Я понял, что freezed поставляется с аналогичной поддержкой класса Union, такой как 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;
}
Обратите внимание, что в двух вышеупомянутых классах объединения я переопределяю ApiFailure
в ApiResult2
, чего я и стараюсь избегать.
Вопрос : Можно ли использовать существующие классы данных для создания класса объединения, чтобы мне не приходилось вносить множественные изменения только для изменения структуры объекта ApiFailure
. Надеюсь, мой вопрос понятен.