diff --git a/lib/pages/analytics/modules/energy_management/widgets/total_energy_consumption_chart_box.dart b/lib/pages/analytics/modules/energy_management/widgets/total_energy_consumption_chart_box.dart index 52a0b0ba..a7992223 100644 --- a/lib/pages/analytics/modules/energy_management/widgets/total_energy_consumption_chart_box.dart +++ b/lib/pages/analytics/modules/energy_management/widgets/total_energy_consumption_chart_box.dart @@ -6,6 +6,7 @@ import 'package:syncrow_web/pages/analytics/modules/energy_management/widgets/to import 'package:syncrow_web/pages/analytics/widgets/analytics_chart_empty_state_widget.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/constants/assets.dart'; import 'package:syncrow_web/utils/style.dart'; class TotalEnergyConsumptionChartBox extends StatelessWidget { @@ -43,12 +44,14 @@ class TotalEnergyConsumptionChartBox extends StatelessWidget { const Divider(), const SizedBox(height: 20), Visibility( - visible: state.chartData.isNotEmpty, + visible: state.chartData.isNotEmpty && + state.chartData.every((e) => e.value != 0), replacement: AnalyticsChartEmptyStateWidget( isLoading: state.status == TotalEnergyConsumptionStatus.loading, isError: state.status == TotalEnergyConsumptionStatus.failure, isInitial: state.status == TotalEnergyConsumptionStatus.initial, errorMessage: state.errorMessage, + iconPath: Assets.emptyEnergyManagementChart, ), child: TotalEnergyConsumptionChart(chartData: state.chartData), ), diff --git a/lib/pages/analytics/widgets/analytics_chart_empty_state_widget.dart b/lib/pages/analytics/widgets/analytics_chart_empty_state_widget.dart index 086cf959..786fe020 100644 --- a/lib/pages/analytics/widgets/analytics_chart_empty_state_widget.dart +++ b/lib/pages/analytics/widgets/analytics_chart_empty_state_widget.dart @@ -1,10 +1,12 @@ import 'package:flutter/material.dart'; +import 'package:flutter_svg/svg.dart'; import 'package:syncrow_web/common/widgets/app_loading_indicator.dart'; import 'package:syncrow_web/utils/color_manager.dart'; import 'package:syncrow_web/utils/extension/build_context_x.dart'; class AnalyticsChartEmptyStateWidget extends StatelessWidget { const AnalyticsChartEmptyStateWidget({ + required this.iconPath, this.isLoading = false, this.isError = false, this.isInitial = false, @@ -20,59 +22,61 @@ class AnalyticsChartEmptyStateWidget extends StatelessWidget { final String? errorMessage; final String noDataMessage; final String initialMessage; + final String iconPath; @override Widget build(BuildContext context) { return Expanded( - child: isLoading - ? const Center( - child: AppLoadingIndicator(), - ) - : isError - ? _buildState( - context, - icon: Icons.error_outline, - message: errorMessage ?? 'Something went wrong', - color: ColorsManager.red, - ) - : isInitial - ? _buildState( - context, - icon: Icons.filter_list, - message: initialMessage, - ) - : _buildState( - context, - icon: Icons.bar_chart, - message: noDataMessage, - ), + child: () { + if (isLoading) { + return const AppLoadingIndicator(); + } else if (isError) { + return _buildState( + context, + message: errorMessage ?? 'Something went wrong', + color: ColorsManager.red, + ); + } else if (isInitial) { + return _buildState(context, message: initialMessage); + } else { + return _buildState(context, message: noDataMessage); + } + }(), ); } Widget _buildState( BuildContext context, { - required IconData icon, required String message, Color? color, }) { final disabledColor = context.theme.disabledColor; return Center( child: Column( + spacing: 16, mainAxisAlignment: MainAxisAlignment.center, children: [ - Icon( - icon, - size: 48, - color: color ?? disabledColor, - ), const SizedBox(height: 16), + Expanded( + child: SvgPicture.asset( + iconPath, + fit: BoxFit.contain, + colorFilter: ColorFilter.mode( + color ?? disabledColor, + BlendMode.srcIn, + ), + ), + ), SelectableText( message, style: context.textTheme.bodyMedium?.copyWith( color: color ?? disabledColor, + fontSize: 16, + fontWeight: FontWeight.w700, ), textAlign: TextAlign.center, ), + const SizedBox(height: 16), ], ), );