如何在flutter中将Either Right初始化为空值

Posted

技术标签:

【中文标题】如何在flutter中将Either Right初始化为空值【英文标题】:How to initialize Either Right to an empty value in flutter 【发布时间】:2021-08-13 08:07:12 【问题描述】:

我最近在我的 Flutter 项目中切换到 null-safety,这在使用 Either 类型(来自 dartz 包)时带来了一种新的问题

例如,在我的类中有一些属性之前:

Either<Failure, List<Product>> _products;

然后我会有一个功能来获取产品,并在我看来消费它。

但是,现在有了 null 安全性,我需要初始化这个属性,因为它永远不应该为 null,而是我想要一个空列表。

如果我这样做

Either<Failure, List<Product?>> _products = [];

我收到此错误

A value of type 'List<dynamic>' can't be assigned to a variable of type 'Either<Failure, List<Product?>>'.

所以我的问题是,如何使用空列表将此属性初始化为正确的 Either 值?

【问题讨论】:

【参考方案1】:

去吧:

Either<Failure, List<Product?>> _products = right([]);

【讨论】:

这似乎工作得很好,谢谢!但是对于那些阅读的人来说,只是稍微更正一下,在 dartz 中,它是 Right(yourvalue)(大写的 R) 太棒了。但是,您的评论并非不正确,但可以说两者都有效。这就是原因: Either right(R r) => new Right(r);【参考方案2】:

您可以使用新的“延迟”关键字来解决此问题

late Either<Failure, List<Product?>> _products;

阅读更多信息here

【讨论】:

以上是关于如何在flutter中将Either Right初始化为空值的主要内容,如果未能解决你的问题,请参考以下文章

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

如果 Either 可以是 Left 或 Right 但不能同时是两者,那么为啥在 Curry-Howard 对应关系中它对应的是 OR 而不是 XOR?

在 Haskell 中组合任何类型的绑定

[Javascript] Either Functor

[JS Compose] Enforce a null check with composable code branching using Either

Flutter-如何在flutter的整个应用程序生命周期中将数据保存在内存中?