From a1142eb38c2fb85cab8ee7620ed72e77b820f989 Mon Sep 17 00:00:00 2001 From: Faris Armoush Date: Tue, 27 May 2025 13:17:05 +0300 Subject: [PATCH] gave range of aqi chart a tooltip that shows the necessary data. --- .../helpers/range_of_aqi_charts_helper.dart | 52 +++++++++++++++++++ .../widgets/range_of_aqi_chart.dart | 6 +-- 2 files changed, 55 insertions(+), 3 deletions(-) diff --git a/lib/pages/analytics/modules/air_quality/helpers/range_of_aqi_charts_helper.dart b/lib/pages/analytics/modules/air_quality/helpers/range_of_aqi_charts_helper.dart index 381a8d03..21cb2a9e 100644 --- a/lib/pages/analytics/modules/air_quality/helpers/range_of_aqi_charts_helper.dart +++ b/lib/pages/analytics/modules/air_quality/helpers/range_of_aqi_charts_helper.dart @@ -1,5 +1,6 @@ import 'package:fl_chart/fl_chart.dart'; import 'package:flutter/material.dart'; +import 'package:intl/intl.dart'; import 'package:syncrow_web/pages/analytics/models/range_of_aqi.dart'; import 'package:syncrow_web/pages/analytics/modules/energy_management/helpers/energy_management_charts_helper.dart'; import 'package:syncrow_web/utils/color_manager.dart'; @@ -60,4 +61,55 @@ abstract final class RangeOfAqiChartsHelper { ), ); } + + static List getTooltipItems( + List touchedSpots, + List chartData, + ) { + return touchedSpots.asMap().entries.map((entry) { + final index = entry.key; + final spot = entry.value; + + final label = switch (spot.barIndex) { + 0 => 'Max', + 1 => 'Avg', + 2 => 'Min', + _ => '', + }; + + final date = DateFormat('dd/MM').format(chartData[spot.x.toInt()].date); + + return LineTooltipItem( + index == 0 ? '$date\n' : '', + const TextStyle( + color: ColorsManager.textPrimaryColor, + fontWeight: FontWeight.w600, + fontSize: 12, + ), + children: [ + TextSpan(text: '$label: ${spot.y.toStringAsFixed(0)}'), + ], + ); + }).toList(); + } + + static LineTouchData lineTouchData( + List chartData, + ) { + return LineTouchData( + touchTooltipData: LineTouchTooltipData( + getTooltipColor: (touchTooltipItem) => ColorsManager.whiteColors, + tooltipBorder: const BorderSide( + color: ColorsManager.semiTransparentBlack, + ), + tooltipRoundedRadius: 16, + showOnTopOfTheChartBoxArea: false, + tooltipPadding: const EdgeInsets.all(8), + getTooltipItems: (touchedSpots) => RangeOfAqiChartsHelper.getTooltipItems( + touchedSpots, + chartData, + ), + ), + ); + } } diff --git a/lib/pages/analytics/modules/air_quality/widgets/range_of_aqi_chart.dart b/lib/pages/analytics/modules/air_quality/widgets/range_of_aqi_chart.dart index 887cdb69..2cefaa8e 100644 --- a/lib/pages/analytics/modules/air_quality/widgets/range_of_aqi_chart.dart +++ b/lib/pages/analytics/modules/air_quality/widgets/range_of_aqi_chart.dart @@ -17,7 +17,7 @@ class RangeOfAqiChart extends StatelessWidget { ( chartData.map((e) => e.max).toList(), const Color(0xFF962DFF), - const Color(0xFF5F00BD) + const Color(0xFF5F00BD), ), ( chartData.map((e) => e.avg).toList(), @@ -27,7 +27,7 @@ class RangeOfAqiChart extends StatelessWidget { ( chartData.map((e) => e.min).toList(), const Color(0xFF93AAFD), - const Color(0xFF023DFE) + const Color(0xFF023DFE), ), ]; @@ -41,7 +41,7 @@ class RangeOfAqiChart extends StatelessWidget { gridData: EnergyManagementChartsHelper.gridData(horizontalInterval: 50), titlesData: RangeOfAqiChartsHelper.titlesData(context, chartData), borderData: EnergyManagementChartsHelper.borderData(), - lineTouchData: EnergyManagementChartsHelper.lineTouchData(), + lineTouchData: RangeOfAqiChartsHelper.lineTouchData(chartData), betweenBarsData: [ BetweenBarsData( fromIndex: 0,