Extracted some logic of RangeOfAqiChart into a helper class.

This commit is contained in:
Faris Armoush
2025-05-26 10:34:57 +03:00
parent 563a3e1cf5
commit 33f9add78a
2 changed files with 77 additions and 83 deletions

View File

@ -0,0 +1,55 @@
import 'package:fl_chart/fl_chart.dart';
import 'package:flutter/material.dart';
import 'package:syncrow_web/pages/analytics/modules/energy_management/helpers/energy_management_charts_helper.dart';
import 'package:syncrow_web/utils/color_manager.dart';
import 'package:syncrow_web/utils/extension/build_context_x.dart';
abstract final class RangeOfAqiChartsHelper {
const RangeOfAqiChartsHelper._();
static const gradientData = <(Color color, String label)>[
(ColorsManager.goodGreen, 'Good'),
(ColorsManager.moderateYellow, 'Moderate'),
(ColorsManager.poorOrange, 'Poor'),
(ColorsManager.unhealthyRed, 'Unhealthy'),
(ColorsManager.severePink, 'Severe'),
(ColorsManager.hazardousPurple, 'Hazardous'),
];
static FlTitlesData titlesData(BuildContext context) {
final titlesData = EnergyManagementChartsHelper.titlesData(context);
return titlesData.copyWith(
leftTitles: titlesData.leftTitles.copyWith(
sideTitles: titlesData.leftTitles.sideTitles.copyWith(
reservedSize: 70,
interval: 51,
maxIncluded: true,
getTitlesWidget: (value, meta) {
String text;
if (value >= 300) {
text = '300+';
} else if (value == 255) {
text = '300';
} else {
text = ((value / 50).round() * 50).toInt().toString();
}
return Padding(
padding: const EdgeInsetsDirectional.only(end: 12),
child: FittedBox(
alignment: AlignmentDirectional.centerStart,
fit: BoxFit.scaleDown,
child: Text(
text,
style: context.textTheme.bodySmall?.copyWith(
fontSize: 12,
color: ColorsManager.lightGreyColor,
),
),
),
);
},
),
),
);
}
}

View File

@ -1,8 +1,8 @@
import 'package:fl_chart/fl_chart.dart';
import 'package:flutter/material.dart';
import 'package:syncrow_web/pages/analytics/modules/air_quality/helpers/range_of_aqi_charts_helper.dart';
import 'package:syncrow_web/pages/analytics/modules/energy_management/helpers/energy_management_charts_helper.dart';
import 'package:syncrow_web/utils/color_manager.dart';
import 'package:syncrow_web/utils/extension/build_context_x.dart';
class RangeOfAqiChart extends StatelessWidget {
final List<double> minValues;
@ -16,15 +16,6 @@ class RangeOfAqiChart extends StatelessWidget {
required this.maxValues,
});
static const _gradientColors = [
ColorsManager.goodGreen,
ColorsManager.moderateYellow,
ColorsManager.poorOrange,
ColorsManager.unhealthyRed,
ColorsManager.severePink,
ColorsManager.hazardousPurple,
];
@override
Widget build(BuildContext context) {
return Stack(
@ -33,10 +24,8 @@ class RangeOfAqiChart extends StatelessWidget {
LineChartData(
minY: 0,
maxY: 301,
gridData: EnergyManagementChartsHelper.gridData(
horizontalInterval: 50,
),
titlesData: _titlesData(context),
gridData: EnergyManagementChartsHelper.gridData(horizontalInterval: 50),
titlesData: RangeOfAqiChartsHelper.titlesData(context),
borderData: EnergyManagementChartsHelper.borderData(),
betweenBarsData: [
BetweenBarsData(
@ -45,46 +34,33 @@ class RangeOfAqiChart extends StatelessWidget {
gradient: LinearGradient(
begin: Alignment.bottomCenter,
end: Alignment.topCenter,
colors: _gradientColors
.map(
(e) => e.withValues(alpha: 0.8),
)
.toList(),
colors: RangeOfAqiChartsHelper.gradientData.map((e) {
final (color, _) = e;
return color.withValues(alpha: 0.8);
}).toList(),
),
),
],
lineBarsData: [
_buildMaxLine(),
_buildAverageLine(),
_buildMinLine(),
],
),
),
],
);
}
LineChartBarData _buildMinLine() {
return _buildLine(
values: minValues,
color: const Color(0xFF93AAFD),
dotColor: const Color(0xFF023DFE),
);
}
LineChartBarData _buildAverageLine() {
return _buildLine(
values: avgValues,
color: Colors.white,
dotColor: null,
);
}
LineChartBarData _buildMaxLine() {
return _buildLine(
_buildLine(
values: maxValues,
color: const Color(0xFF962DFF),
dotColor: const Color(0xFF5F00BD),
),
_buildLine(
values: avgValues,
color: Colors.white,
dotColor: null,
),
_buildLine(
values: minValues,
color: const Color(0xFF93AAFD),
dotColor: const Color(0xFF023DFE),
),
],
),
),
],
);
}
@ -119,41 +95,4 @@ class RangeOfAqiChart extends StatelessWidget {
belowBarData: BarAreaData(show: false),
);
}
FlTitlesData _titlesData(BuildContext context) {
final titlesData = EnergyManagementChartsHelper.titlesData(context);
return titlesData.copyWith(
leftTitles: titlesData.leftTitles.copyWith(
sideTitles: titlesData.leftTitles.sideTitles.copyWith(
reservedSize: 70,
interval: 51,
maxIncluded: true,
getTitlesWidget: (value, meta) {
String text;
if (value >= 300) {
text = '300+';
} else if (value == 255) {
text = '300';
} else {
text = ((value / 50).round() * 50).toInt().toString();
}
return Padding(
padding: const EdgeInsetsDirectional.only(end: 12),
child: FittedBox(
alignment: AlignmentDirectional.centerStart,
fit: BoxFit.scaleDown,
child: Text(
text,
style: context.textTheme.bodySmall?.copyWith(
fontSize: 12,
color: ColorsManager.lightGreyColor,
),
),
),
);
},
),
),
);
}
}