对于相同类型的问题,我已经在堆栈上完成了一些基于条件的线程,但输出不是我想要的。
以下是我目前对我的代码所做的操作,它正在工作,但从我的角度来看,这是一种糟糕的做法,尽管我可能错了,这是需要做的事情!
方法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()'.
我不想要null结果,因为如果存在父记录的条目,则默认的基于langCode
的记录总是存在的。
orElse
应返回默认值,而不是布尔值。
transData = data.translations.firstWhere(
(element) => element.langCode == langCode,
orElse: () => aDefaultTranslation);