Опция получения > распаковывается во флаттер - PullRequest
0 голосов
/ 28 апреля 2020

В моем состоянии blo c у меня есть это:

Option<Either<T, Stream<T>>> optionFailureOrStream,

Может быть пустым (Option) или иметь error или stream.

В моем bloc я получаю это с optionOf следующим образом:

 yield state.copyWith(optionFailureOrStream: optionOf(failureOrStream));

Теперь в моем виджете я хочу знать, имеет ли оно значение, и если оно имеет значение, я хочу сложить их чтобы вернуть два разных экрана:

 if (state.optionFailureOrStream.isSome()) {
    final optionFailureOrStream = state.optionFailureOrStream;

    optionFailureOrStream.map((a) => a.fold(
        (failure) => FailureWidget(failure: failure),
        (stream) => buildSaved(stream, context)));
}

Но почему-то я не могу избавиться от типа Option<T>. Он жалуется на неправильный тип.

The return type 'Option<Widget>' isn't a 'Widget', as required by the closure's context.dart(return_of_invalid_type_from_closure)

Полагаю, есть действительно простой способ сделать это. Мне очень трудно найти какие-либо руководства, связанные с дротиками и трепетанием, и исходный код dartz не слишком понятен, если вы новичок в этих понятиях.

1 Ответ

0 голосов
/ 28 апреля 2020
Widget func() {
  Option<Either<String, Stream<String>>>//I assume your failure is a string for example
      optionFailureOrStream; 
  return optionFailureOrStream.fold(
    () => Container(),//if none()
    (Either<String, Stream<String>> either)//if some(Either<String,Stream<String>>) 
    => either.fold(
      (String failure) => Container(),
      (Stream<String> stream) => Container(),
    ),
  );
}

примечание: этот код только для демонстрации (если это не ясно), как вы видите, я даже не инициализирую переменную, а код просто для демонстрации того, как вы можете вернуть значение из опции, не используя оператор if

...