为啥我们应该在颤振中使用选项?

Posted

技术标签:

【中文标题】为啥我们应该在颤振中使用选项?【英文标题】:Why we should use option in flutter?为什么我们应该在颤振中使用选项? 【发布时间】:2021-06-13 11:02:52 【问题描述】:

飞镖和颤振中“选项”的用例是什么,谁能解释一下。

  Eg:  Future<Option<User>> getSignedInUser();

【问题讨论】:

这个Option 类来自args 包吗? pub.dev/documentation/args/latest/args/Option-class.html 它来自 dartz 包:pub.dev/packages/dartz 【参考方案1】:

您可以看到dartz 包提供的OptionEither 被大量用于遵循函数式编程范式的应用程序。它们被称为monads

让我们举个例子,当进行 API 调用时,它可以返回预期值,也可以返回错误。通常我们会在发生错误或抛出异常时返回null,但这可能会导致运行时错误,并且对于处理不同的错误类型没有用处(为最终用户显示确切的错误消息)。

Monad 允许我们将这两种结果都封装在一个泛型类中。

回到Option,它表示两种可能类型之一的值。惯例是将缺失值视为None 的实例,并将预期成功值视为Some 的实例。所以它用一个类来表示返回值的缺失,而不仅仅是null

此外,您可以使用fold() 方法来处理这两种情况,如下所示:

void main() 
  final car = Car(Colors.black, 'Mercedes');

  final option = getNameAsOptional(car); // Get name of the car, returning an Option 

  // Use the fold() method to handle both case: name is None and name is Some
  option.fold(
    () => print('None!'), // 1st case: Failure
    (name) => print('Aha! Your car's name is $name'), // 2nd case: Success
  );

P/S:您可以在this article 阅读更多关于 monads 的信息。它来自不同包的作者,但基本概念保持不变。

【讨论】:

以上是关于为啥我们应该在颤振中使用选项?的主要内容,如果未能解决你的问题,请参考以下文章

我应该如何在颤振应用程序中管理登录页面

为啥有两个选项可以在 PySpark 中读取 CSV 文件?我应该使用哪一个?

为啥颤振调试应用程序显示“慢速模式”横幅?

为啥当我在颤振应用程序中使用键盘时这会显示给我

如何允许在颤振应用程序中使用相机? [关闭]

为啥我不能在颤振中添加包