From c709477500e68ed855c92cf74ff8f2f54cf145f5 Mon Sep 17 00:00:00 2001 From: Faris Armoush Date: Wed, 14 May 2025 15:55:12 +0300 Subject: [PATCH] some refactors to further clarify intent. --- .../widgets/analytics_device_dropdown.dart | 87 +++++++++++++++++++ ...wer_clamp_energy_data_device_dropdown.dart | 66 -------------- .../power_clamp_energy_data_widget.dart | 5 +- .../widgets/occupancy_end_side_bar.dart | 7 +- 4 files changed, 94 insertions(+), 71 deletions(-) create mode 100644 lib/pages/analytics/modules/energy_management/widgets/analytics_device_dropdown.dart delete mode 100644 lib/pages/analytics/modules/energy_management/widgets/power_clamp_energy_data_device_dropdown.dart diff --git a/lib/pages/analytics/modules/energy_management/widgets/analytics_device_dropdown.dart b/lib/pages/analytics/modules/energy_management/widgets/analytics_device_dropdown.dart new file mode 100644 index 00000000..0d96fb70 --- /dev/null +++ b/lib/pages/analytics/modules/energy_management/widgets/analytics_device_dropdown.dart @@ -0,0 +1,87 @@ +import 'package:flutter/material.dart'; +import 'package:flutter_bloc/flutter_bloc.dart'; +import 'package:syncrow_web/pages/analytics/models/analytics_device.dart'; +import 'package:syncrow_web/pages/analytics/modules/analytics/blocs/analytics_devices/analytics_devices_bloc.dart'; +import 'package:syncrow_web/utils/color_manager.dart'; +import 'package:syncrow_web/utils/extension/build_context_x.dart'; + +class AnalyticsDeviceDropdown extends StatelessWidget { + const AnalyticsDeviceDropdown({required this.onChanged, super.key}); + + final ValueChanged onChanged; + + @override + Widget build(BuildContext context) { + return BlocBuilder( + builder: (context, state) { + return Container( + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(16), + border: Border.all( + color: ColorsManager.greyColor, + width: 1, + ), + ), + child: Visibility( + visible: state.devices.isNotEmpty, + replacement: _buildNoDevicesFound(context), + child: _buildDevicesDropdown(context, state), + ), + ); + }, + ); + } + + static const _defaultPadding = EdgeInsetsDirectional.symmetric( + horizontal: 20, + vertical: 2, + ); + + Widget _buildNoDevicesFound(BuildContext context) { + return Padding( + padding: _defaultPadding, + child: Text( + 'no devices found', + style: _getTextStyle(context), + ), + ); + } + + Widget _buildDevicesDropdown(BuildContext context, AnalyticsDevicesState state) { + return DropdownButton( + value: state.selectedDevice, + isDense: true, + borderRadius: BorderRadius.circular(16), + dropdownColor: ColorsManager.whiteColors, + underline: const SizedBox.shrink(), + icon: const RotatedBox( + quarterTurns: 1, + child: Icon(Icons.chevron_right, size: 16), + ), + style: _getTextStyle(context), + padding: _defaultPadding, + items: state.devices.map((e) { + return DropdownMenuItem( + value: e, + child: Text(e.name), + ); + }).toList(), + onChanged: (value) { + if (value case final AnalyticsDevice device) { + context.read().add( + SelectAnalyticsDeviceEvent(device), + ); + onChanged.call(device); + } + }, + ); + } + + TextStyle? _getTextStyle(BuildContext context) { + return context.textTheme.labelSmall?.copyWith( + color: ColorsManager.textPrimaryColor, + fontWeight: FontWeight.w700, + fontSize: 14, + ); + } +} diff --git a/lib/pages/analytics/modules/energy_management/widgets/power_clamp_energy_data_device_dropdown.dart b/lib/pages/analytics/modules/energy_management/widgets/power_clamp_energy_data_device_dropdown.dart deleted file mode 100644 index 20227244..00000000 --- a/lib/pages/analytics/modules/energy_management/widgets/power_clamp_energy_data_device_dropdown.dart +++ /dev/null @@ -1,66 +0,0 @@ -import 'package:flutter/material.dart'; -import 'package:flutter_bloc/flutter_bloc.dart'; -import 'package:syncrow_web/pages/analytics/models/analytics_device.dart'; -import 'package:syncrow_web/pages/analytics/modules/analytics/blocs/analytics_devices/analytics_devices_bloc.dart'; -import 'package:syncrow_web/utils/color_manager.dart'; -import 'package:syncrow_web/utils/extension/build_context_x.dart'; - -class PowerClampEnergyDataDeviceDropdown extends StatelessWidget { - const PowerClampEnergyDataDeviceDropdown({ - required this.onChanged, - super.key, - }); - - final ValueChanged onChanged; - - @override - Widget build(BuildContext context) { - return BlocBuilder( - builder: (context, state) { - return Container( - decoration: BoxDecoration( - borderRadius: BorderRadius.circular(16), - border: Border.all( - color: ColorsManager.greyColor, - width: 1, - ), - ), - child: DropdownButton( - value: state.selectedDevice, - isDense: true, - borderRadius: BorderRadius.circular(16), - dropdownColor: ColorsManager.whiteColors, - underline: const SizedBox.shrink(), - icon: const RotatedBox( - quarterTurns: 1, - child: Icon(Icons.chevron_right, size: 16), - ), - style: context.textTheme.labelSmall?.copyWith( - color: ColorsManager.textPrimaryColor, - fontWeight: FontWeight.w700, - fontSize: 14, - ), - padding: const EdgeInsetsDirectional.symmetric( - horizontal: 20, - vertical: 2, - ), - items: state.devices.map((e) { - return DropdownMenuItem( - value: e, - child: Text(e.name), - ); - }).toList(), - onChanged: (value) { - if (value case final AnalyticsDevice device) { - context.read().add( - SelectAnalyticsDeviceEvent(device), - ); - onChanged.call(device); - } - }, - ), - ); - }, - ); - } -} diff --git a/lib/pages/analytics/modules/energy_management/widgets/power_clamp_energy_data_widget.dart b/lib/pages/analytics/modules/energy_management/widgets/power_clamp_energy_data_widget.dart index 81cacd75..eb75bf11 100644 --- a/lib/pages/analytics/modules/energy_management/widgets/power_clamp_energy_data_widget.dart +++ b/lib/pages/analytics/modules/energy_management/widgets/power_clamp_energy_data_widget.dart @@ -110,7 +110,7 @@ class PowerClampEnergyDataWidget extends StatelessWidget { mainAxisSize: MainAxisSize.min, children: [ Expanded( - flex: 2, + flex: 3, child: FittedBox( fit: BoxFit.scaleDown, alignment: AlignmentDirectional.centerStart, @@ -126,10 +126,11 @@ class PowerClampEnergyDataWidget extends StatelessWidget { ), const Spacer(), Expanded( + flex: 2, child: FittedBox( fit: BoxFit.scaleDown, alignment: AlignmentDirectional.centerEnd, - child: PowerClampEnergyDataDeviceDropdown( + child: AnalyticsDeviceDropdown( onChanged: (value) { FetchEnergyManagementDataHelper.loadRealtimeDeviceChanges( context, diff --git a/lib/pages/analytics/modules/occupancy/widgets/occupancy_end_side_bar.dart b/lib/pages/analytics/modules/occupancy/widgets/occupancy_end_side_bar.dart index 5455a958..9f096789 100644 --- a/lib/pages/analytics/modules/occupancy/widgets/occupancy_end_side_bar.dart +++ b/lib/pages/analytics/modules/occupancy/widgets/occupancy_end_side_bar.dart @@ -4,7 +4,7 @@ import 'package:syncrow_web/pages/analytics/models/power_clamp_energy_status.dar import 'package:syncrow_web/pages/analytics/modules/analytics/blocs/analytics_devices/analytics_devices_bloc.dart'; import 'package:syncrow_web/pages/analytics/modules/energy_management/blocs/realtime_device_changes/realtime_device_changes_bloc.dart'; import 'package:syncrow_web/pages/analytics/modules/energy_management/helpers/fetch_energy_management_data_helper.dart'; -import 'package:syncrow_web/pages/analytics/modules/energy_management/widgets/power_clamp_energy_data_device_dropdown.dart'; +import 'package:syncrow_web/pages/analytics/modules/energy_management/widgets/analytics_device_dropdown.dart'; import 'package:syncrow_web/pages/analytics/modules/energy_management/widgets/power_clamp_energy_status_widget.dart'; import 'package:syncrow_web/pages/device_managment/all_devices/models/device_status.dart'; import 'package:syncrow_web/utils/color_manager.dart'; @@ -107,7 +107,7 @@ class OccupancyEndSideBar extends StatelessWidget { mainAxisSize: MainAxisSize.min, children: [ Expanded( - flex: 2, + flex: 3, child: FittedBox( fit: BoxFit.scaleDown, alignment: AlignmentDirectional.centerStart, @@ -123,10 +123,11 @@ class OccupancyEndSideBar extends StatelessWidget { ), const Spacer(), Expanded( + flex: 2, child: FittedBox( fit: BoxFit.scaleDown, alignment: AlignmentDirectional.centerEnd, - child: PowerClampEnergyDataDeviceDropdown( + child: AnalyticsDeviceDropdown( onChanged: (value) => FetchEnergyManagementDataHelper.loadRealtimeDeviceChanges( context,