MyNewAppWriteTankApp/lib/pages/graph/widgets/bar_chart_widget.dart
2025-08-24 19:54:36 +02:00

125 lines
3.5 KiB
Dart

import 'package:fl_chart/fl_chart.dart';
import 'package:flutter/material.dart';
import '../../../utils/extensions/constants.dart';
import '../graph_controller.dart';
class BarChartWidget extends StatelessWidget {
final GraphController graphCtrl;
const BarChartWidget({super.key, required this.graphCtrl});
@override
Widget build(BuildContext context) {
return AspectRatio(
aspectRatio: 2,
child: BarChart(
BarChartData(
//alignment: BarChartAlignment.center,
maxY: 50,
baselineY: 0,
barTouchData: barTouchData,
titlesData: titlesData,
borderData: borderData,
barGroups: barGroups,
gridData: const FlGridData(show: false),
),
),
);
}
BarTouchData get barTouchData => BarTouchData(
enabled: false,
touchTooltipData: BarTouchTooltipData(
//tooltipBgColor: Colors.transparent,
tooltipPadding: EdgeInsets.zero,
tooltipMargin: 8,
getTooltipItem:
(
BarChartGroupData group,
int groupIndex,
BarChartRodData rod,
int rodIndex,
) {
return BarTooltipItem(
rod.toY.round().toString(),
const TextStyle(color: Colors.cyan, fontWeight: FontWeight.bold),
);
},
),
);
Widget getTitles(double value, TitleMeta meta) {
List<String> dayMonListString = graphCtrl.getHeadDescription();
for (var i = 0; i < dayMonListString.length; i++) {
if (i == value.toInt()) {
graphCtrl.szBarTitle.value = dayMonListString[i];
}
}
return SideTitleWidget(
fitInside: SideTitleFitInsideData.fromTitleMeta(meta),
space: 4,
meta: meta,
child: Text(graphCtrl.szBarTitle.value, style: kBarTitleStyle),
);
}
FlTitlesData get titlesData => FlTitlesData(
show: true,
bottomTitles: AxisTitles(
sideTitles: SideTitles(
showTitles: true,
reservedSize: 30,
getTitlesWidget: getTitles,
),
),
leftTitles: const AxisTitles(sideTitles: SideTitles(showTitles: false)),
topTitles: const AxisTitles(sideTitles: SideTitles(showTitles: false)),
rightTitles: const AxisTitles(sideTitles: SideTitles(showTitles: false)),
);
FlBorderData get borderData => FlBorderData(show: false);
LinearGradient get _barsGradient => LinearGradient(
colors: [Colors.blue.shade400, Colors.red.shade300],
begin: Alignment.bottomCenter,
end: Alignment.topCenter,
);
List<BarChartGroupData> get barGroups => [
BarChartGroupData(
x: 0,
barRods: [BarChartRodData(toY: 8, gradient: _barsGradient)],
showingTooltipIndicators: [0],
),
BarChartGroupData(
x: 1,
barRods: [BarChartRodData(toY: 10, gradient: _barsGradient)],
showingTooltipIndicators: [0],
),
BarChartGroupData(
x: 2,
barRods: [BarChartRodData(toY: 14, gradient: _barsGradient)],
showingTooltipIndicators: [0],
),
BarChartGroupData(
x: 3,
barRods: [BarChartRodData(toY: 15, gradient: _barsGradient)],
showingTooltipIndicators: [0],
),
BarChartGroupData(
x: 4,
barRods: [BarChartRodData(toY: 13, gradient: _barsGradient)],
showingTooltipIndicators: [0],
),
BarChartGroupData(
x: 5,
barRods: [BarChartRodData(toY: 10, gradient: _barsGradient)],
showingTooltipIndicators: [0],
),
BarChartGroupData(
x: 6,
barRods: [BarChartRodData(toY: 16, gradient: _barsGradient)],
showingTooltipIndicators: [0],
),
];
}