如何从Column、Row或列表中的Column提取其子Widget列表?
提取Column组件的子Widget列表解决方案
你的原方法失效主要有两个原因:
- 拼写错误:Column的子组件属性是
children,不是childrens - 类型问题:
listWidget默认是List<dynamic>类型,直接访问元素属性会因类型不确定报错,需要先转为Column类型
正确实现代码
final listWidget = []; listWidget.add( Column(children: [ SizedBox(), SizedBox(), SizedBox(), ], )); // 安全提取子Widget列表 if (listWidget[0] is Column) { Column targetColumn = listWidget[0] as Column; List<Widget> childrenList = targetColumn.children.toList(); // 此时childrenList就是Column内的三个SizedBox实例 }
优化写法(提前指定类型)
如果listWidget从一开始就只存放Column组件,可以直接声明类型,后续操作更简洁:
final List<Column> listWidget = []; listWidget.add( Column(children: [ SizedBox(), SizedBox(), SizedBox(), ], )); // 直接访问children属性 List<Widget> childrenList = listWidget[0].children.toList();
注:Column.children本身就是List<Widget>类型,调用toList()是为了生成一个列表副本;如果不需要副本,直接使用targetColumn.children即可。
内容的提问来源于stack exchange,提问作者ReGeNs
相关产品推荐
相关产品推荐

