Flutter基础:遍历对象时for循环报expected an identifier错误如何解决
错误原因
- 数组内的Map定义语法错误:你写的
label = 'Reckless'是给外层声明的label变量赋值,不是给Map添加label键,Dart中Map的键值对需要用key: value格式。同时toggles被声明为Object类型,Dart无法识别它是可迭代的列表类型,无法直接用for-in遍历。
- 数组内的Map定义语法错误:你写的
- Flutter组件的
children参数接收List<Widget>类型,你直接在children后写带大括号的for循环不符合Dart的集合for语法规范。
- Flutter组件的
修正方案
第一步:修正数据定义
你可以选择两种定义方式,第一种是直接用Map数组:
// 修正为Map数组类型,键值对用:赋值 final List<Map<String, String>> toggles = [ {'label': 'Reckless'}, {'label': 'Feckless'}, {'label': 'Legless'}, ];
如果需要用点语法.label访问属性,更推荐定义强类型数据类:
// 定义数据类 class ToggleItem { final String label; ToggleItem({required this.label}); } // 声明数组 final List<ToggleItem> toggles = [ ToggleItem(label: 'Reckless'), ToggleItem(label: 'Feckless'), ToggleItem(label: 'Legless'), ];
第二步:修正Row遍历写法
使用Dart集合for语法,把循环逻辑放在列表括号内,不需要加循环大括号:
如果用Map版本的toggles,写法如下:
Row( children: [ for (var toggle in toggles) Text('label ${toggle['label']}') ], )
如果用自定义数据类版本,写法如下:
Row( children: [ for (var toggle in toggles) Text('label ${toggle.label}') ], )
内容的提问来源于stack exchange,提问作者Walrus
相关产品推荐
相关产品推荐

