import 'package:flutter/cupertino.dart';
import '../foundation/color.dart';
class BarChartPainter extends CustomPainter {
final List<double> data;
final double barWidth = 12.0;
final double spacing = 16.0;
final double cornerRadius = 8.0;
BarChartPainter(this.data);
@override
void paint(Canvas canvas, Size size) {
final defaultPaint = Paint()
..color = CGColor.secondary_3rd
..style = PaintingStyle.fill;
final bluePaint = Paint()
..color = CGColor.primary_1st
..style = PaintingStyle.fill;
for (int i = 0; i < data.length; i++) {
final x = (i * (barWidth + spacing)).toDouble();
final y = size.height * (1-data[i]);
final defaultRect = RRect.fromRectAndRadius(
Rect.fromPoints(Offset(x, 0), Offset(x + barWidth, size.height)),
Radius.circular(cornerRadius),
);
final rect = RRect.fromRectAndRadius(
Rect.fromPoints(Offset(x, size.height), Offset(x + barWidth, y)),
Radius.circular(cornerRadius),
);
canvas.drawRRect(defaultRect, defaultPaint);
canvas.drawRRect(rect, bluePaint);
}
}
@override
bool shouldRepaint(covariant CustomPainter oldDelegate) {
return false;
}
}
사용하는 방법
Container(
padding: const EdgeInsets.all(Spacing.s12),
height: 128,
child: CustomPaint(
size: const Size(double.infinity, double.infinity),
painter: BarChartPainter([0.5, 0.5, 0.7, 1, 0, 0, 0]),
),
)