Files
flutter-frame/lib/shared/widgets/chart_widgets/bar_chart_widget.dart
2026-03-01 07:55:59 +09:00

85 lines
2.5 KiB
Dart

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<BarChartGroupData> 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,
),
),
),
],
);
}
}