LCOV - code coverage report
Current view: top level - lib/charts/painter - pie_radius_painter.dart Coverage Total Hit
Test: lcov.info Lines: 0.0 % 26 0
Test Date: 2026-11-14 15:08:11 Functions: - 0 0

            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_value.dart';
       5              : import 'package:app_finance/charts/painter/abstract_painter.dart';
       6              : import 'package:material_ui/material_ui.dart';
       7              : import 'dart:math';
       8              : 
       9              : class PieRadiusPainter extends AbstractPainter {
      10              :   final List<ChartValue> data;
      11              :   late final double max;
      12              : 
      13            0 :   PieRadiusPainter({
      14              :     required this.data,
      15              :     required super.indent,
      16              :   }) {
      17            0 :     int length = data.where((o) => o.value > 0).length;
      18            0 :     if (length == 1) {
      19              :       length = 0;
      20              :     }
      21            0 :     max = data.fold(0.0, (v, o) => v + o.value) * (1 + indent * length);
      22              :   }
      23              : 
      24            0 :   @override
      25              :   void paint(Canvas canvas, Size size) {
      26            0 :     double startPoint = pi / 2;
      27            0 :     for (int i = 0; i < data.length; i++) {
      28            0 :       startPoint = _drawArc(canvas, size, startPoint, i);
      29              :     }
      30              :   }
      31              : 
      32            0 :   double _drawArc(Canvas canvas, Size size, double startPoint, int step) {
      33            0 :     final strokeWidth = size.width / 4;
      34            0 :     final paint = Paint()
      35            0 :       ..color = data[step].color
      36            0 :       ..strokeWidth = strokeWidth
      37            0 :       ..style = PaintingStyle.stroke;
      38            0 :     final paintBorder = Paint()
      39            0 :       ..strokeWidth = strokeWidth * 1.1
      40            0 :       ..color = data[step].color.withValues(alpha: 0.3)
      41            0 :       ..style = PaintingStyle.stroke;
      42              :     const full = 2 * pi;
      43            0 :     final shift = indent * full;
      44            0 :     double endPoint = (data[step].value / max) * full;
      45              : 
      46            0 :     var center = Offset(size.width / 2, size.height / 2);
      47            0 :     var radius = [size.width, size.height].reduce(min) / 4;
      48              : 
      49            0 :     final arc = Rect.fromCircle(center: center, radius: radius);
      50            0 :     canvas.drawArc(arc, startPoint - shift / 2, endPoint + shift, false, paintBorder);
      51            0 :     canvas.drawArc(arc, startPoint, endPoint, false, paint);
      52            0 :     return startPoint + endPoint + shift;
      53              :   }
      54              : }
        

Generated by: LCOV version 2.0-1