В Freezed возможно создавать объединенные случаи из уже существующих заблокированных классов данных - PullRequest
1 голос
/ 09 апреля 2020

Я использую 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. Надеюсь, мой вопрос понятен.

...