问题描述
对于相同类型的问题,我在堆栈上经历了一些基于条件的线程,但是输出不是我想要的。
下面是我目前正在使用的代码正在执行的工作,但是从我的角度来看这是一种不好的做法,尽管我可能是错的,并且是需要做的事情!
方法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);