获取 Option<Either<T,T>> 在 Flutter 中解压
Getting Option<Either<T,T>> unpacked in Flutter
在我的集团状态下,我有这个:
Option<Either<T, Stream<T>>> optionFailureOrStream,
它可以为空 (Option
) 或具有 error
或 stream
。
在我的 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 语句的选项
在我的集团状态下,我有这个:
Option<Either<T, Stream<T>>> optionFailureOrStream,
它可以为空 (Option
) 或具有 error
或 stream
。
在我的 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 语句的选项