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

Flutter父组件状态更新后子Syncfusion图表组件不刷新如何解决

问题原因

你的问题根源出在ResultChart子组件的状态处理逻辑上:你在子组件的initState生命周期里,仅在组件第一次创建时把父组件传入的formattedData赋值给了本地变量_chartData。而initState只会在组件初始化时执行一次,后续父组件下拉选择年份后传入新的formattedData时,子组件的本地_chartData不会自动同步更新,所以图表永远渲染第一次的初始数据。

解决方案

有两种常用修复方式,选其中一种即可:

方案1:删除本地冗余变量(最简便)

直接删掉子组件中声明的_chartData本地变量,所有用到_chartData的地方直接使用父组件传入的widget.formattedData即可。修改后子组件的LineSeries部分代码如下:

LineSeries<IpcData, String>( 
  color: Colors.blue,
  dataSource: widget.formattedData,
  xValueMapper: (IpcData data, _) => data.date,
  yValueMapper: (IpcData data, _) => data.value
)

这种方式不需要维护本地数据副本,父组件传新值后子组件build时会自动读取最新的参数,直接触发图表重绘。

方案2:添加生命周期监听更新本地数据

如果你有特殊需求必须在子组件内保留本地_chartData变量,就给子组件添加didUpdateWidget生命周期回调,当父组件传入的参数发生变化时同步更新本地变量:

@override
void didUpdateWidget(covariant ResultChart oldWidget) {
  super.didUpdateWidget(oldWidget);
  if (widget.formattedData != oldWidget.formattedData) {
    setState(() {
      _chartData = widget.formattedData;
    });
  }
}

该方法会在父组件给子组件传递新参数时自动触发,对比新旧数据不一致就更新本地变量并重绘。


内容的提问来源于stack exchange,提问作者Matías Baeza Graf

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 10:27:01