LCOV - code coverage report
Current view: top level - lib/charts/painter - pie_radius_painter.dart (source / functions) Hit Total Coverage
Test: lcov.info Lines: 0 25 0.0 %
Date: 2024-10-04 11:12:13 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:flutter/material.dart';
       7             : import 'dart:math';
       8             : 
       9             : class PieRadiusPainter extends AbstractPainter {
      10             :   final List<ChartValue> data;
      11             :   late final double max;
      12             :   double radius = 0;
      13             :   Offset center = const Offset(0, 0);
      14             : 
      15           0 :   PieRadiusPainter({
      16             :     required this.data,
      17             :     required super.indent,
      18             :   }) {
      19           0 :     int length = data.where((o) => o.value > 0).length;
      20           0 :     if (length == 1) {
      21             :       length = 0;
      22             :     }
      23           0 :     max = data.fold(0.0, (v, o) => v + o.value) * (1 + indent * length);
      24             :   }
      25             : 
      26           0 :   @override
      27             :   void paint(Canvas canvas, Size size) {
      28           0 :     center = Offset(size.width, size.height * 3 / 4);
      29           0 :     radius = size.width / 2;
      30             : 
      31           0 :     double startPoint = pi / 2;
      32           0 :     for (int i = 0; i < data.length; i++) {
      33           0 :       startPoint = _drawArc(canvas, size, startPoint, i);
      34             :     }
      35             :   }
      36             : 
      37           0 :   double _drawArc(Canvas canvas, Size size, double startPoint, int step) {
      38           0 :     final paint = Paint()
      39           0 :       ..color = data[step].color
      40           0 :       ..strokeWidth = size.width / 2
      41           0 :       ..style = PaintingStyle.stroke;
      42           0 :     final paintBorder = Paint()
      43           0 :       ..strokeWidth = size.width * 1.1 / 2
      44           0 :       ..color = data[step].color.withOpacity(0.3)
      45           0 :       ..style = PaintingStyle.stroke;
      46             :     const full = 2 * pi;
      47           0 :     final shift = indent * full;
      48           0 :     double endPoint = (data[step].value / max) * full;
      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 1.14