在 Flutter 中解压 Option<Either<T,T>>
Posted
技术标签:
【中文标题】在 Flutter 中解压 Option<Either<T,T>>【英文标题】:Getting Option<Either<T,T>> unpacked in Flutter 【发布时间】:2020-08-12 03:28:47 【问题描述】:在我的集团州,我有这个:
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)
我认为有一种非常简单的方法可以做到这一点。我很难找到任何与 dart/flutter 相关的手册,如果您不熟悉这些概念,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 语句的情况下从选项返回值
【讨论】:
以上是关于在 Flutter 中解压 Option<Either<T,T>>的主要内容,如果未能解决你的问题,请参考以下文章