首页 > 解决方案 > 如何在基于 dart 的 firstWhere 中以 orElse 返回其他基于条件的结果

问题描述

对于相同类型的问题,我已经在堆栈上通过了一些基于条件的线程,但输出不是我想要的。

下面是我目前正在使用我的代码正在做的事情,但从我的角度来看这是不好的做法,尽管我可能是错的并且是事情需要完成的方式!

方法一:

transData = data.translations.firstWhere(
            (element) => element.langCode == langCode,
            orElse: () => null);
        transData = (transData == null)
            ? data.translations.firstWhere(
                (element) => element.langCode == 'en-IN',
                orElse: () => null)
            : transData;

方法二:

transData = data.translations.firstWhere(
            (element) => element.langCode == langCode,
            orElse: () => data.translations.firstWhere(
                (element) => element.langCode == 'en-IN',
                orElse: () => null));

您可以清楚地看到我想要的是检查给定条件是否为真,然后根据默认值返回结果langCode。因为这orElse是最好的地方,但如果代码如下,则会出现错误:

代码:

transData = data.translations.firstWhere(
            (element) => element.langCode == langCode,
            orElse: (element) => element.langCode == 'en-IN');

错误:

The argument type 'ModelName Function(dynamic)' can't be assigned to the parameter type 'ModelName Function()'.

我不想要空结果,因为langCode如果存在父记录的条目,则始终存在基于默认的记录。

标签: validationflutterdartconditional-statementswhere-clause

解决方案


orElse应该返回一个默认值,而不是布尔值。

transData = data.translations.firstWhere(
            (element) => element.langCode == langCode,
            orElse: () => aDefaultTranslation);

推荐阅读