import 'package:fl_chart/fl_chart.dart'; import 'package:flutter/material.dart'; import 'package:okane/ui/pages/account/breakdown_card.dart'; typedef OkanePieChartSection = ({String title, double value, Color color}); typedef OkanePieChartValueConverter = String Function(double); String numToString(double input) { return input.toString(); } class OkanePieChart extends StatelessWidget { // Width of the pie chart final double width; // Height of the pie chart final double height; final List items; final OkanePieChartValueConverter valueConverter; const OkanePieChart({ required this.items, this.valueConverter = numToString, this.width = 150, this.height = 150, super.key, }); @override Widget build(BuildContext context) { return Row( mainAxisSize: MainAxisSize.min, children: [ Padding( padding: EdgeInsets.all(16), child: SizedBox( width: width, height: height, child: AspectRatio( aspectRatio: 1, child: PieChart( PieChartData( borderData: FlBorderData(show: false), sectionsSpace: 5, centerSpaceRadius: 35, sections: items .map( (i) => PieChartSectionData( value: i.value, title: valueConverter(i.value), titleStyle: TextStyle( fontWeight: FontWeight.bold, ), radius: 40, color: i.color, ), ) .toList(), ), ), ), ), ), Padding( padding: EdgeInsets.symmetric(horizontal: 8), child: Column( mainAxisSize: MainAxisSize.min, mainAxisAlignment: MainAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start, children: items .map((i) => LegendItem(text: i.title, color: i.color)) .toList(), ), ), ], ); } }