import 'package:fl_chart/fl_chart.dart'; import 'package:flutter/material.dart'; class BarChartWidget extends StatelessWidget { const BarChartWidget({ required this.barGroups, this.title, this.maxY, this.bottomTitles, this.barColor, super.key, }); final List barGroups; final String? title; final double? maxY; final Widget Function(double, TitleMeta)? bottomTitles; final Color? barColor; @override Widget build(BuildContext context) { final theme = Theme.of(context); return Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ if (title != null) Padding( padding: const EdgeInsets.only(bottom: 16), child: Text( title!, style: theme.textTheme.titleMedium?.copyWith( fontWeight: FontWeight.bold, ), ), ), Expanded( child: BarChart( BarChartData( maxY: maxY, gridData: const FlGridData(show: false), borderData: FlBorderData(show: false), titlesData: FlTitlesData( topTitles: const AxisTitles( sideTitles: SideTitles(showTitles: false), ), rightTitles: const AxisTitles( sideTitles: SideTitles(showTitles: false), ), bottomTitles: AxisTitles( sideTitles: SideTitles( showTitles: true, getTitlesWidget: bottomTitles ?? (value, meta) => SideTitleWidget( meta: meta, child: Text( value.toInt().toString(), style: theme.textTheme.bodySmall, ), ), ), ), leftTitles: AxisTitles( sideTitles: SideTitles( showTitles: true, reservedSize: 40, getTitlesWidget: (value, meta) => SideTitleWidget( meta: meta, child: Text( value.toInt().toString(), style: theme.textTheme.bodySmall, ), ), ), ), ), barGroups: barGroups, ), ), ), ], ); } }