[Flutter] 파이차트 만들기

kimdocs...📄·2023년 12월 1일
0

flutter

목록 보기
19/30
import 'package:flutter/material.dart';

class DonutChartPainter extends CustomPainter {
  final double outerRadius;
  final double innerRadius;
  final List<double> values;
  final List<Color> colors;

  DonutChartPainter({
    required this.outerRadius,
    required this.innerRadius,
    required this.values,
    required this.colors,
  });

  double radians(double degrees) {
    return degrees * (3.14159265359 / 180.0);
  }

  
  void paint(Canvas canvas, Size size) {
    final double centerX = size.width / 2;
    final double centerY = size.height / 2;
    final double radius = outerRadius;

    double startAngle = 0;
    double totalValue = values.reduce((a, b) => a + b);

    for (int i = 0; i < values.length; i++) {
      final paint = Paint()
        ..color = colors[i]
        ..style = PaintingStyle.fill;

      final sweepAngle = (values[i] / totalValue) * 360;

      // 외부 원 그리기
      canvas.drawArc(
        Rect.fromCircle(center: Offset(centerX, centerY), radius: radius),
        radians(startAngle),
        radians(sweepAngle),
        true,
        paint,
      );

      startAngle += sweepAngle;
    }

    // 내부 원 그리기 (가운데 뚫린 부분)
    final innerCirclePaint = Paint()
      ..color = Colors.white
      ..style = PaintingStyle.fill;
    canvas.drawCircle(Offset(centerX, centerY), innerRadius, innerCirclePaint);
  }

  
  bool shouldRepaint(covariant CustomPainter oldDelegate) {
    return false;
  }
}
profile
👩‍🌾 GitHub: ezidayzi / 📂 Contact: ezidayzi@gmail.com

0개의 댓글