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

Flutter如何重复调用Widget?列表循环渲染仅显示最后一条数据求助

问题原因

你的Charts组件里的data1、data2、data3应该是静态变量或者全局变量,导致所有Charts实例共享同一组数据。循环渲染时,最后一次赋值会覆盖之前所有实例的变量,所以所有图表都显示最后一条数据。

解决方案

  1. 将数据变量改为实例变量:在Charts类内部定义非静态的成员变量,每个实例拥有独立的数据副本。
  2. 修正initState逻辑:确保赋值给当前实例的变量,而不是全局/静态变量。

修改后的Charts组件示例:

class Charts extends StatefulWidget {
  final YourDataModel GetData; // 替换成你的数据模型实际类型

  const Charts({super.key, required this.GetData});

  @override
  State<Charts> createState() => _ChartsState();
}

class _ChartsState extends State<Charts> {
  // 定义为实例变量,每个Charts实例独立持有
  late dynamic data1; // 替换成对应的数据类型
  late dynamic data2;
  late dynamic data3;

  @override
  void initState() {
    super.initState();
    // 赋值给当前实例的成员变量
    data1 = widget.GetData.data1;
    data2 = widget.GetData.data2;
    data3 = widget.GetData.data3;
  }

  @override
  Widget build(BuildContext context) {
    // 此处使用data1/data2/data3渲染图表
    return /* 你的图表UI代码 */;
  }
}

额外优化建议

如果你的数据可能在组件生命周期内更新,需要重写didUpdateWidget方法,确保新数据能同步到图表:

@override
void didUpdateWidget(covariant Charts oldWidget) {
  super.didUpdateWidget(oldWidget);
  // 当传入的GetData发生变化时,更新本地变量
  if (widget.GetData != oldWidget.GetData) {
    setState(() {
      data1 = widget.GetData.data1;
      data2 = widget.GetData.data2;
      data3 = widget.GetData.data3;
    });
  }
}

内容的提问来源于stack exchange,提问作者minifanini

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 03:55:15