flutter - 如果列表中的项目为空,则列表搜索返回错误 - 阻止搜索
问题描述
我正在尝试实现对列表显示的搜索。列表中有一些字段,null
当我尝试搜索它时返回错误(这很明显)。我试图用过滤器方法处理它,但它不起作用。
这是一个示例代码,如果任何一个查询为空,则它不起作用。
var appData = query.isEmpty
? data
: data
.where((element) =>
element.gateApptNum
.toLowerCase()
.contains(query.toLowerCase()) ||
element.truckPlateNbr
.toLowerCase()
.contains(query.toLowerCase()) ||
element.gateAppointment[0].containerNum != null
? element.gateAppointment[0].containerNum
: 'false'
.toLowerCase()
.contains(query.toLowerCase()) ||
element.truckPlateNbr
.toLowerCase()
.contains(query.toLowerCase()))
.toList();
如果我尝试处理过滤器中的错误,以下是我得到的错误
解决方案
在描述中的代码片段中,您使用where 方法过滤null
值,该方法采用返回bool
值的谓词,但在三元表达式的片段中,如果条件是,true
那么您返回element.gateAppointment[0].containerNum
的可能是 aString
而不是bool
。
我认为只评估条件以过滤掉null
值会更好,如下所示。
.where((element) =>
element.gateApptNum
.toLowerCase()
.contains(query.toLowerCase()) ||
element.truckPlateNbr
.toLowerCase()
.contains(query.toLowerCase()) ||
element.gateAppointment[0].containerNum != null)
如果要更改元素,则可以使用map after where
。
如果你想退货,element.gateAppointment[0].containerNum
那么你可以这样退货:
var appData = query.isEmpty
? data
: data
.where((element) =>
element.gateApptNum
.toLowerCase()
.contains(query.toLowerCase()) ||
element.truckPlateNbr
.toLowerCase()
.contains(query.toLowerCase()) ||
element.gateAppointment[0].containerNum != null
)
.map((element) => element.gateAppointment[0].containerNum)
.toList();
推荐阅读
- javascript - 使用 jQuery 访问父元素的第一个/最后一个子元素中的数据属性
- google-cloud-platform - 如何在云构建上用全局变量替换多个触发器?
- python - TypeError: float() 参数必须是字符串或数字,而不是 'dict_values',
- typescript - 检查函数参数是否是打字稿中特定类型的枚举
- vba - 用于过滤数据的消息框
- javascript - 两次javascript之间的区别
- python - 无法启动 chrome 驱动程序
- javascript - 如何覆盖 JavaScript 方法
- python - 如何与 Python 中隐藏元素下的元素进行交互
- node.js - 使用节点在 mongodb 中列出集合时遇到问题