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
相关产品推荐
相关产品推荐

