added loading indicators to charts.

This commit is contained in:
Faris Armoush
2025-05-07 12:20:46 +03:00
parent 9bbf3e75fa
commit 5e6c14efeb
6 changed files with 40 additions and 6 deletions

View File

@ -22,8 +22,8 @@ class TotalEnergyConsumptionBloc
TotalEnergyConsumptionLoadEvent event,
Emitter<TotalEnergyConsumptionState> emit,
) async {
emit(state.copyWith(status: TotalEnergyConsumptionStatus.loading));
try {
emit(state.copyWith(status: TotalEnergyConsumptionStatus.loading));
final chartData = await _totalEnergyConsumptionService.load(event.param);
emit(
state.copyWith(

View File

@ -22,7 +22,7 @@ class EnergyConsumptionByPhasesChartBox extends StatelessWidget {
spacing: 20,
children: [
AnalyticsErrorWidget(state.errorMessage),
const EnergyConsumptionByPhasesTitle(),
EnergyConsumptionByPhasesTitle(isLoading: state.status == EnergyConsumptionByPhasesStatus.loading,),
Expanded(
child: EnergyConsumptionByPhasesChart(
energyData: state.chartData,

View File

@ -1,10 +1,12 @@
import 'package:flutter/material.dart';
import 'package:syncrow_web/pages/analytics/modules/energy_management/widgets/chart_title.dart';
import 'package:syncrow_web/pages/analytics/widgets/charts_loading_widget.dart';
import 'package:syncrow_web/utils/color_manager.dart';
import 'package:syncrow_web/utils/extension/build_context_x.dart';
class EnergyConsumptionByPhasesTitle extends StatelessWidget {
const EnergyConsumptionByPhasesTitle({super.key});
const EnergyConsumptionByPhasesTitle({super.key, required this.isLoading});
final bool isLoading;
@override
Widget build(BuildContext context) {
@ -12,6 +14,7 @@ class EnergyConsumptionByPhasesTitle extends StatelessWidget {
crossAxisAlignment: CrossAxisAlignment.center,
mainAxisAlignment: MainAxisAlignment.center,
children: [
ChartsLoadingWidget(isLoading: isLoading),
Expanded(
flex: 4,
child: FittedBox(

View File

@ -5,6 +5,7 @@ import 'package:syncrow_web/pages/analytics/modules/energy_management/widgets/ch
import 'package:syncrow_web/pages/analytics/modules/energy_management/widgets/energy_consumption_per_device_chart.dart';
import 'package:syncrow_web/pages/analytics/modules/energy_management/widgets/energy_consumption_per_device_devices_list.dart';
import 'package:syncrow_web/pages/analytics/widgets/analytics_error_widget.dart';
import 'package:syncrow_web/pages/analytics/widgets/charts_loading_widget.dart';
import 'package:syncrow_web/utils/style.dart';
class EnergyConsumptionPerDeviceChartBox extends StatelessWidget {
@ -28,6 +29,8 @@ class EnergyConsumptionPerDeviceChartBox extends StatelessWidget {
Row(
spacing: 32,
children: [
if (state.status == EnergyConsumptionPerDeviceStatus.loading)
const ChartsLoadingWidget(isLoading: true),
const Expanded(
flex: 3,
child: FittedBox(

View File

@ -4,6 +4,7 @@ import 'package:syncrow_web/pages/analytics/modules/energy_management/blocs/tota
import 'package:syncrow_web/pages/analytics/modules/energy_management/widgets/chart_title.dart';
import 'package:syncrow_web/pages/analytics/modules/energy_management/widgets/total_energy_consumption_chart.dart';
import 'package:syncrow_web/pages/analytics/widgets/analytics_error_widget.dart';
import 'package:syncrow_web/pages/analytics/widgets/charts_loading_widget.dart';
import 'package:syncrow_web/utils/style.dart';
class TotalEnergyConsumptionChartBox extends StatelessWidget {
@ -22,9 +23,12 @@ class TotalEnergyConsumptionChartBox extends StatelessWidget {
crossAxisAlignment: CrossAxisAlignment.start,
children: [
AnalyticsErrorWidget(state.errorMessage),
const Row(
Row(
children: [
Expanded(
ChartsLoadingWidget(
isLoading: state.status == TotalEnergyConsumptionStatus.loading,
),
const Expanded(
flex: 3,
child: FittedBox(
alignment: AlignmentDirectional.centerStart,
@ -32,7 +36,7 @@ class TotalEnergyConsumptionChartBox extends StatelessWidget {
child: ChartTitle(title: Text('Total Energy Consumption')),
),
),
Spacer(flex: 4),
const Spacer(flex: 4),
],
),
const Divider(),

View File

@ -0,0 +1,24 @@
import 'package:flutter/material.dart';
class ChartsLoadingWidget extends StatelessWidget {
const ChartsLoadingWidget({
required this.isLoading,
super.key,
});
final bool isLoading;
@override
Widget build(BuildContext context) {
return Visibility(
visible: isLoading,
child: const SizedBox.square(
dimension: 16,
child: FittedBox(
child: CircularProgressIndicator(
padding: EdgeInsetsDirectional.only(end: 8),
),
),
),
);
}
}