mirror of
https://github.com/SyncrowIOT/web.git
synced 2025-07-10 07:07:19 +00:00
Extracted some logic of RangeOfAqiChart
into a helper class.
This commit is contained in:
@ -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,
|
||||
),
|
||||
),
|
||||
),
|
||||
);
|
||||
},
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
@ -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,18 +34,29 @@ 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(),
|
||||
_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),
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
@ -64,30 +64,6 @@ class RangeOfAqiChart extends StatelessWidget {
|
||||
);
|
||||
}
|
||||
|
||||
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(
|
||||
values: maxValues,
|
||||
color: const Color(0xFF962DFF),
|
||||
dotColor: const Color(0xFF5F00BD),
|
||||
);
|
||||
}
|
||||
|
||||
FlDotData _buildDotData(Color color) {
|
||||
return FlDotData(
|
||||
show: true,
|
||||
@ -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,
|
||||
),
|
||||
),
|
||||
),
|
||||
);
|
||||
},
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user