【问题标题】:Dart simplify method call for null valueDart 简化空值的方法调用
【发布时间】:2021-05-29 19:24:43
【问题描述】:

我有这个逻辑:

title: Text(widget.text != null ? transform(widget.text!) : 'default'),

我使用三元运算符调用 transform 函数(它不接受空参数),仅当文本不为空时。

有没有办法使用一些空安全运算符来简化这个?

编辑:

假设转换函数返回文本+“12”,如下所示:

String transform(String a) {
    return a + " 12";
  }

假设我无法更改该功能

【问题讨论】:

  • transform 函数有什么作用?
  • 如果您的 text 字段接受空值,这就是执行此操作的方法。

标签: flutter dart


【解决方案1】:

编辑

根据您的评论,您可以修改您的 transform 函数以在提供的值为 null 的情况下返回默认值(见下文)。

String transform(String? a) {
    if (a == null) return 'default';
    return a + " 12";
}


// Then you should just be able to do this.
title: Text(transform(widget.text)),

老答案

一种简化的方法是这样的:

title: Text(transform(widget.text ?? 'default')),

以上代码假定transform 函数不返回可为空的值。如果transform 确实返回一个可为空的值,那么您必须这样做。

title: Text(transform(widget.text ?? 'default') ?? 'default'),

?? 你问什么?

?? 检查它之前的值是否为空,如果是则返回它右边的值。如果它左边的值是not null,那么它将返回那个值。

【讨论】:

  • 感谢您的回答,但它不适用于我的情况,因为文本字段将获取转换函数返回的值,发送“默认”作为参数,所以如果它更改文本我会得到一些东西不同于“默认”。 (见我的编辑)
  • 这是一个很好的解决方案,但我只是在这里放了一个简化的例子,我无法在实际案例中更改功能
【解决方案2】:

您可以引入以下辅助方法(是的,命名可能会更好,所以请在您自己的项目中改进):

O callIfNotNull<I extends Object, O>(I? input, O Function(I) function,
        {required O ifNull}) =>
    input != null ? function(input) : ifNull;

这将允许我们这样做:

title: callIfNotNull(widget.text, transform, ifNull: 'default')

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-21
    • 2012-10-28
    • 2023-04-05
    相关资源
    最近更新 更多