From 4af81bcc1096cf579741f6cddd3bcb2e5b83bffb Mon Sep 17 00:00:00 2001 From: Faris Armoush Date: Mon, 26 May 2025 11:22:05 +0300 Subject: [PATCH] make the aqi range chart read its data from `RangeOfAqiBloc`. --- .../widgets/range_of_aqi_chart.dart | 27 ++++-- .../widgets/range_of_aqi_chart_box.dart | 91 ++++++------------- 2 files changed, 46 insertions(+), 72 deletions(-) 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 d53fee0e..5796c1d8 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 @@ -1,25 +1,34 @@ import 'package:fl_chart/fl_chart.dart'; import 'package:flutter/material.dart'; +import 'package:syncrow_web/pages/analytics/models/range_of_aqi.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'; class RangeOfAqiChart extends StatelessWidget { - final List minValues; - final List avgValues; - final List maxValues; + final List chartData; const RangeOfAqiChart({ super.key, - required this.minValues, - required this.avgValues, - required this.maxValues, + required this.chartData, }); List<(List values, Color color, Color? dotColor)> _lines() => [ - (maxValues, const Color(0xFF962DFF), const Color(0xFF5F00BD)), - (avgValues, Colors.white, null), - (minValues, const Color(0xFF93AAFD), const Color(0xFF023DFE)), + ( + chartData.map((e) => e.max).toList(), + const Color(0xFF962DFF), + const Color(0xFF5F00BD) + ), + ( + chartData.map((e) => e.avg).toList(), + Colors.white, + null, + ), + ( + chartData.map((e) => e.min).toList(), + const Color(0xFF93AAFD), + const Color(0xFF023DFE) + ), ]; @override diff --git a/lib/pages/analytics/modules/air_quality/widgets/range_of_aqi_chart_box.dart b/lib/pages/analytics/modules/air_quality/widgets/range_of_aqi_chart_box.dart index 685f1665..86696392 100644 --- a/lib/pages/analytics/modules/air_quality/widgets/range_of_aqi_chart_box.dart +++ b/lib/pages/analytics/modules/air_quality/widgets/range_of_aqi_chart_box.dart @@ -1,6 +1,9 @@ import 'package:flutter/material.dart'; +import 'package:flutter_bloc/flutter_bloc.dart'; +import 'package:syncrow_web/pages/analytics/modules/air_quality/blocs/range_of_aqi/range_of_aqi_bloc.dart'; import 'package:syncrow_web/pages/analytics/modules/air_quality/widgets/range_of_aqi_chart.dart'; import 'package:syncrow_web/pages/analytics/modules/energy_management/widgets/chart_title.dart'; +import 'package:syncrow_web/pages/analytics/widgets/analytics_error_widget.dart'; import 'package:syncrow_web/utils/style.dart'; class RangeOfAqiChartBox extends StatelessWidget { @@ -8,70 +11,32 @@ class RangeOfAqiChartBox extends StatelessWidget { @override Widget build(BuildContext context) { - return Container( - padding: const EdgeInsetsDirectional.all(30), - decoration: subSectionContainerDecoration.copyWith( - borderRadius: BorderRadius.circular(30), - ), - child: const Column( - mainAxisSize: MainAxisSize.min, - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - ChartTitle(title: Text('Range of AQI')), - SizedBox(height: 10), - Divider(), - SizedBox(height: 20), - Expanded( - child: RangeOfAqiChart( - avgValues: [ - 50, - 70, - 90, - 110, - 130, - 150, - 170, - 190, - 210, - 230, - 250, - 270, - 290, - ], - minValues: [ - 0, - 20, - 40, - 60, - 80, - 100, - 120, - 140, - 160, - 180, - 200, - 220, - 240, - ], - maxValues: [ - 100, - 120, - 140, - 160, - 180, - 200, - 220, - 240, - 260, - 280, - 300, - 301, - 301, - ], - ), + return BlocBuilder( + builder: (context, state) { + return Container( + padding: const EdgeInsetsDirectional.all(30), + decoration: subSectionContainerDecoration.copyWith( + borderRadius: BorderRadius.circular(30), ), - ], - ), + child: Column( + mainAxisSize: MainAxisSize.min, + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + AnalyticsErrorWidget(state.errorMessage), + const SizedBox(height: 10), + const ChartTitle(title: Text('Range of AQI')), + const SizedBox(height: 10), + const Divider(), + const SizedBox(height: 20), + Expanded( + child: RangeOfAqiChart( + chartData: state.rangeOfAqi, + ), + ), + ], + ), + ); + }, ); } }