Flutter中如何提取List嵌套Map内指定项的live值做条件判断
错误原因
where() 方法返回的是满足筛选条件的元素集合(Iterable类型),既不是布尔值,也不是单个匹配元素,无法直接作为三目运算符的判断条件,所以触发类型不匹配报错。
正确实现方案
你可以用firstWhere()方法直接获取匹配code=1的单个元素,再提取live字段做判断即可,同时建议加异常兜底逻辑避免匹配不到元素/字段不存在时报错:
List aa = [ {'live': true, 'name': 'John', 'code': 1}, {'live': false, 'name': 'Doe', 'code': 2}, ]; // 1. 查找code=1的元素,匹配不到时默认返回空Map final target = aa.firstWhere((item) => item['code'] == 1, orElse: () => {}); // 2. 提取live字段,字段不存在时默认返回false final isLive = target['live'] ?? false; // 条件渲染组件 isLive ? const Text('alive!?') : const Text('not alive!?')
如果能100%确定列表中一定存在code=1的元素、且该元素一定有live布尔字段,也可以直接简写为一行:
aa.firstWhere((e) => e['code'] == 1)['live'] ? const Text('alive!?') : const Text('not alive!?')
内容的提问来源于stack exchange,提问作者chichi
相关产品推荐
相关产品推荐

