获取 Option<Either<T,T>> 在 Flutter 中解压

Getting Option<Either<T,T>> unpacked in Flutter

在我的集团状态下,我有这个:

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

它可以为空 (Option) 或具有 errorstream

在我的 bloc 中,我用 optionOf 产生了这个:

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

现在在我的 Widget 中,我想知道它是否有值,如果有值,我想将它们折叠到 return 两个不同的屏幕:

 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)

我想有一种非常简单的方法可以做到这一点。我真的很难找到任何 dart/flutter 相关的手册,如果您不熟悉这些概念,dartz 的源代码并不是那么容易解释。

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

注意:此代码仅用于演示(如果不清楚),如您所见,我什至没有初始化变量,但代码只是为了演示如何 return 来自不使用 if 语句的选项