Flutter中如何为charts_flutter的TimeSeriesChart设置自定义颜色值
如何自定义charts_flutter中TimeSeriesChart的线条颜色
你遇到的问题核心是类型不匹配:colorFn要求返回charts.Color类型,但Theme.of(context).accentColor是Flutter框架自带的Color类型,两者不能直接混用,所以才会报错。下面给你几种可行的解决方法:
方法1:直接用十六进制颜色代码创建自定义颜色
你可以把目标十六进制颜色(比如#FF5722这类)转换成charts.Color,有两种方式实现:
final chartdata = [ charts.Series<VolumePerDay, DateTime>( id: 'Workout', // 方式1:直接传入十六进制字符串 colorFn: (_, __) => charts.Color.fromHex(code: '#FF5722'), // 方式2:拆分RGB值传入构造函数 // colorFn: (_, __) => charts.Color(r: 255, g: 87, b: 34), domainFn: (VolumePerDay workout, _) => workout.time, measureFn: (VolumePerDay workout, _) => workout.volume, data: data, ) ];
方法2:将Flutter主题色转换为charts.Color
如果你想继续使用Theme中的颜色,可以写一个简单的转换函数,把Flutter的Color转成charts.Color:
// 定义转换工具函数 charts.Color convertFlutterColor(Color color) { return charts.Color( r: color.red, g: color.green, b: color.blue, a: color.alpha, // 可选,需要透明度时加上 ); } // 在Series中调用转换函数 final chartdata = [ charts.Series<VolumePerDay, DateTime>( id: 'Workout', colorFn: (_, __) => convertFlutterColor(Theme.of(context).accentColor), domainFn: (VolumePerDay workout, _) => workout.time, measureFn: (VolumePerDay workout, _) => workout.volume, data: data, ) ];
方法3:用MaterialPalette创建自定义色调
如果你想沿用charts_flutter的MaterialPalette体系,也可以基于自定义颜色生成调色板:
final chartdata = [ charts.Series<VolumePerDay, DateTime>( id: 'Workout', colorFn: (_, __) => charts.MaterialPalette.custom('#FF5722').shadeDefault, domainFn: (VolumePerDay workout, _) => workout.time, measureFn: (VolumePerDay workout, _) => workout.volume, data: data, ) ];
最后整合后的完整图表代码可以直接运行:
return charts.TimeSeriesChart( chartdata, animate: false, );
内容的提问来源于stack exchange,提问作者dshukertjr
相关产品推荐
相关产品推荐

