如何在基于飞镖的orElse中首先返回其他基于条件的结果

问题描述

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

下面是我目前正在使用的代码正在执行的工作,但是从我的角度来看这是一种不好的做法,尽管我可能是错的,并且是需要做的事情!

方法1:

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

方法2:

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的记录将始终存在。

解决方法

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

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