Получение Option <Either <T,T >>, распакованного во Flutter
В моем состоянии блока у меня есть это:
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 ответ
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