validation - 如何在基于 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
如果存在父记录的条目,则始终存在基于默认的记录。
解决方案
orElse
应该返回一个默认值,而不是布尔值。
transData = data.translations.firstWhere(
(element) => element.langCode == langCode,
orElse: () => aDefaultTranslation);
推荐阅读
- terraform - 如何在terraform中将列表迭代到某个元素/索引?
- python-3.x - 将浮点数转换为具有数字和 nan 的列的整数
- c# - 如何在gridview的TextBox中将字符串转换为DateTime
- prestashop-1.7 - 如何在 prestashop 模块中禁用订单确认邮件?
- java - Okhttp3:使用 HeaderInterceptor 需要帮助
- python - Python gTTS几个mp3文件问题
- java - 如何使recyclerview中的进度条不可见
- android - 如何连接一些 Firebase 数据库,其 google-services.json 未添加到我的应用中
- postgresql - 将数据库从 sqlite 转换为 postgres 的问题
- c# - 使用嵌套括号拆分字符串,但将它们保留在自己的组中