You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 18:27:06