Line data Source code
1 : // Copyright 2023 The terCAD team. All rights reserved. 2 : // Use of this source code is governed by a CC BY-NC-ND 4.0 license that can be found in the LICENSE file. 3 : 4 : import 'package:app_finance/charts/interface/chart_data.dart'; 5 : import 'package:app_finance/charts/painter/abstract_painter.dart'; 6 : import 'package:flutter/material.dart'; 7 : 8 : class ColumnChartPainter extends AbstractPainter { 9 : final List<ChartData> data; 10 : late Canvas canvas; 11 : 12 0 : ColumnChartPainter({ 13 : required super.indent, 14 : required this.data, 15 : super.size, 16 : super.xMax = 1.0, 17 : super.xMin = 0.0, 18 : super.yMax = 1.0, 19 : }); 20 : 21 0 : @override 22 : void paint(Canvas canvas, Size size) { 23 0 : if (data.isEmpty) { 24 : return; 25 : } 26 0 : this.size ??= size; 27 0 : this.canvas = canvas; 28 0 : for (int i = 0; i < data.length; i++) { 29 0 : _draw(data[i], i / data.length); 30 : } 31 : } 32 : 33 0 : void _draw(ChartData scope, double shift) { 34 0 : for (int i = 0; i < scope.data.length; i++) { 35 0 : _drawRectangle(scope.data[i], i - shift - 1, scope.color, scope.strokeWidth); 36 : } 37 : } 38 : 39 0 : void _drawRectangle(Offset value, double shift, Color color, double stroke) { 40 0 : final paint = Paint() 41 0 : ..color = color 42 0 : ..style = PaintingStyle.fill 43 0 : ..strokeWidth = 1; 44 0 : final time = value.dx.toDouble(); 45 0 : final rect = Rect.fromPoints( 46 0 : getValue(Offset(time - msDay * shift * 3 * stroke, value.dy), size!), 47 0 : getValue(Offset(time - msDay * (shift + 1) * 3 * stroke, 0.0), size!), 48 : ); 49 0 : canvas.drawRect(rect, paint); 50 : } 51 : }