Flutter/Dart 遍历Map构造Card列表的语法问题求助
现有代码核心问题
marginsCard[int.parse('ID')]语法完全错误:字符串'ID'无法转为整数,会直接抛出格式异常,且你的需求是遍历marginsCard全部条目,不是按索引取单个元素- 每个条目下的
margins是4个独立的单键Map,没有把四个边距属性放在同一个Map里,不能直接用cardElement['marginLeft']这种方式取值
正确实现代码
List<Widget> buildCardElementList() { // 遍历marginsCard所有配置项,每个配置项对应一个Card return marginsCard.map((cardConfig) { // 取出当前配置的边距数组 final margins = cardConfig['margins'] as List<Map<String, int>>; // 把分散的边距Map合并为一个统一的Map,简化取值逻辑 final marginMap = { for (var m in margins) ...m }; // 传入边距值调用构造方法生成Card return buildCardElement( marginMap['marginLeft']!, marginMap['marginRight']!, marginMap['marginBottom']!, marginMap['marginTop']!, ); }).toList(); }
如果Dart版本不支持集合展开语法,可以用兼容写法取值:
List<Widget> buildCardElementList() { return marginsCard.map((cardConfig) { final margins = cardConfig['margins'] as List<Map<String, int>>; int marginLeft = margins.firstWhere((m) => m.containsKey('marginLeft'))['marginLeft']!; int marginRight = margins.firstWhere((m) => m.containsKey('marginRight'))['marginRight']!; int marginBottom = margins.firstWhere((m) => m.containsKey('marginBottom'))['marginBottom']!; int marginTop = margins.firstWhere((m) => m.containsKey('marginTop'))['marginTop']!; return buildCardElement(marginLeft, marginRight, marginBottom, marginTop); }).toList(); }
逻辑说明
- 外层遍历
marginsCard数组的所有配置项,每个配置项对应一个要生成的Card - 对每个配置项,先把分散的4个单键边距Map合并为一个统一的Map,避免多次重复匹配取值
- 取出四个边距值传入已有构造方法生成组件,最后调用
toList()转换为Card列表返回
内容的提问来源于stack exchange,提问作者Joe
相关产品推荐
相关产品推荐

