Flutter基于父类属性调用类方法及类型报错解决
问题解决方案
错误原因
你遇到的类型错误是因为遍历data时的类型声明和实际传入的元素类型不匹配:你传入的data数组中的每一项都是Map类型,但你在循环中把遍历项声明为了List,运行时类型校验不通过触发报错。
修复代码
class MyToolbar extends StatelessWidget { // 明确入参类型,编译期即可校验传入格式是否正确 MyToolbar({required this.data}); final List<Map<String, List<String>>> data; // 明确方法返回值和参数类型,避免隐式类型问题 Widget ToolbarContent(String type, List<String> data) { if (type == 'MySecondClass') { return MySecondClass(toggles: data); } // 兜底返回,避免新增类型时无返回值报错 return const SizedBox.shrink(); } @override Widget build(BuildContext context) { return Stack(children: [ // 遍历data中的每个Map元素 for (final Map item in data) // 遍历Map的所有键值对,自动取key作为类型参数,value作为数据参数 for (final MapEntry entry in item.entries) ToolbarContent(entry.key, entry.value) ]); } }
额外注意点
- 修复前你硬编码传入的
type是小写开头的mySecondClass,和判断条件的MySecondClass大小写不一致,会导致判断失效,现在直接读取Map的key传入即可规避该问题 - 所有属性、参数、方法都明确声明类型后,Dart的静态类型校验会在编码阶段提前发现格式问题,不需要等到运行时才报错
- 如果你的
data中可能存在多个key的Map,上述遍历逻辑会自动处理所有键值对,不需要额外修改代码
内容的提问来源于stack exchange,提问作者Walrus
相关产品推荐
相关产品推荐

