From dad18b77de2a4238b0ac2e0b37969fd21a44fbf5 Mon Sep 17 00:00:00 2001 From: fkarmoush Date: Wed, 26 Mar 2025 12:35:04 +0300 Subject: [PATCH 1/5] Removed `community` filter field from `DeviceSearchFilters`. --- .../widgets/device_search_filters.dart | 60 ++++++++++--------- 1 file changed, 33 insertions(+), 27 deletions(-) diff --git a/lib/pages/device_managment/all_devices/widgets/device_search_filters.dart b/lib/pages/device_managment/all_devices/widgets/device_search_filters.dart index 650c0d21..0f565525 100644 --- a/lib/pages/device_managment/all_devices/widgets/device_search_filters.dart +++ b/lib/pages/device_managment/all_devices/widgets/device_search_filters.dart @@ -12,8 +12,8 @@ class DeviceSearchFilters extends StatefulWidget { State createState() => _DeviceSearchFiltersState(); } -class _DeviceSearchFiltersState extends State with HelperResponsiveLayout { - final TextEditingController communityController = TextEditingController(); +class _DeviceSearchFiltersState extends State + with HelperResponsiveLayout { final TextEditingController unitNameController = TextEditingController(); final TextEditingController productNameController = TextEditingController(); @@ -22,11 +22,17 @@ class _DeviceSearchFiltersState extends State with HelperRe return isExtraLargeScreenSize(context) ? Row( children: [ - _buildSearchField("Community", communityController, 200), + _buildSearchField( + "Space Name", + unitNameController, + 200, + ), const SizedBox(width: 20), - _buildSearchField("Space Name", unitNameController, 200), - const SizedBox(width: 20), - _buildSearchField("Device Name / Product Name", productNameController, 300), + _buildSearchField( + "Device Name / Product Name", + productNameController, + 300, + ), const SizedBox(width: 20), _buildSearchResetButtons(), ], @@ -36,11 +42,10 @@ class _DeviceSearchFiltersState extends State with HelperRe runSpacing: 10, children: [ _buildSearchField( - "Community", - communityController, + "Space Name", + unitNameController, 200, ), - _buildSearchField("Space Name", unitNameController, 200), _buildSearchField( "Device Name / Product Name", productNameController, @@ -51,22 +56,25 @@ class _DeviceSearchFiltersState extends State with HelperRe ); } - Widget _buildSearchField(String title, TextEditingController controller, double width) { - return Container( - child: StatefulTextField( - title: title, - width: width, - elevation: 2, - controller: controller, - onSubmitted: () { - context.read().add(SearchDevices( - productName: productNameController.text, - unitName: unitNameController.text, - community: communityController.text, - searchField: true)); - }, - onChanged: (p0) {}, - ), + Widget _buildSearchField( + String title, + TextEditingController controller, + double width, + ) { + return StatefulTextField( + title: title, + width: width, + elevation: 2, + controller: controller, + onSubmitted: () { + final searchDevicesEvent = SearchDevices( + productName: productNameController.text, + unitName: unitNameController.text, + searchField: true, + ); + context.read().add(searchDevicesEvent); + }, + onChanged: (p0) {}, ); } @@ -74,13 +82,11 @@ class _DeviceSearchFiltersState extends State with HelperRe return SearchResetButtons( onSearch: () { context.read().add(SearchDevices( - community: communityController.text, unitName: unitNameController.text, productName: productNameController.text, searchField: true)); }, onReset: () { - communityController.clear(); unitNameController.clear(); productNameController.clear(); context.read() From b65f172f9dec7495cb5ec4c9c52a2941a2d3bcc7 Mon Sep 17 00:00:00 2001 From: fkarmoush Date: Wed, 26 Mar 2025 12:36:26 +0300 Subject: [PATCH 2/5] Removed memory leak bug from `DeviceSearchFilters` widget. --- .../widgets/device_search_filters.dart | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/lib/pages/device_managment/all_devices/widgets/device_search_filters.dart b/lib/pages/device_managment/all_devices/widgets/device_search_filters.dart index 0f565525..428f0b58 100644 --- a/lib/pages/device_managment/all_devices/widgets/device_search_filters.dart +++ b/lib/pages/device_managment/all_devices/widgets/device_search_filters.dart @@ -14,8 +14,22 @@ class DeviceSearchFilters extends StatefulWidget { class _DeviceSearchFiltersState extends State with HelperResponsiveLayout { - final TextEditingController unitNameController = TextEditingController(); - final TextEditingController productNameController = TextEditingController(); + late final TextEditingController unitNameController; + late final TextEditingController productNameController; + + @override + void initState() { + unitNameController = TextEditingController(); + productNameController = TextEditingController(); + super.initState(); + } + + @override + void dispose() { + unitNameController.dispose(); + productNameController.dispose(); + super.dispose(); + } @override Widget build(BuildContext context) { From d3128a9c9ca0bedab81dfc8e3980e753240078ac Mon Sep 17 00:00:00 2001 From: fkarmoush Date: Wed, 26 Mar 2025 12:37:03 +0300 Subject: [PATCH 3/5] Refactor search button callback for improved readability --- .../all_devices/widgets/device_search_filters.dart | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/lib/pages/device_managment/all_devices/widgets/device_search_filters.dart b/lib/pages/device_managment/all_devices/widgets/device_search_filters.dart index 428f0b58..659a291a 100644 --- a/lib/pages/device_managment/all_devices/widgets/device_search_filters.dart +++ b/lib/pages/device_managment/all_devices/widgets/device_search_filters.dart @@ -94,12 +94,13 @@ class _DeviceSearchFiltersState extends State Widget _buildSearchResetButtons() { return SearchResetButtons( - onSearch: () { - context.read().add(SearchDevices( - unitName: unitNameController.text, - productName: productNameController.text, - searchField: true)); - }, + onSearch: () => context.read().add( + SearchDevices( + unitName: unitNameController.text, + productName: productNameController.text, + searchField: true, + ), + ), onReset: () { unitNameController.clear(); productNameController.clear(); From f670ae78aa87e7022f6b10a9910770c8faa24f25 Mon Sep 17 00:00:00 2001 From: fkarmoush Date: Wed, 26 Mar 2025 12:39:51 +0300 Subject: [PATCH 4/5] Refactor device search filters layout for improved code organization and to remove any code duplication. --- .../widgets/device_search_filters.dart | 61 ++++++++----------- 1 file changed, 26 insertions(+), 35 deletions(-) diff --git a/lib/pages/device_managment/all_devices/widgets/device_search_filters.dart b/lib/pages/device_managment/all_devices/widgets/device_search_filters.dart index 659a291a..3910257f 100644 --- a/lib/pages/device_managment/all_devices/widgets/device_search_filters.dart +++ b/lib/pages/device_managment/all_devices/widgets/device_search_filters.dart @@ -31,43 +31,34 @@ class _DeviceSearchFiltersState extends State super.dispose(); } + List get _widgets => [ + _buildSearchField( + "Space Name", + unitNameController, + 200, + ), + _buildSearchField( + "Device Name / Product Name", + productNameController, + 300, + ), + _buildSearchResetButtons(), + ]; + @override Widget build(BuildContext context) { - return isExtraLargeScreenSize(context) - ? Row( - children: [ - _buildSearchField( - "Space Name", - unitNameController, - 200, - ), - const SizedBox(width: 20), - _buildSearchField( - "Device Name / Product Name", - productNameController, - 300, - ), - const SizedBox(width: 20), - _buildSearchResetButtons(), - ], - ) - : Wrap( - spacing: 20, - runSpacing: 10, - children: [ - _buildSearchField( - "Space Name", - unitNameController, - 200, - ), - _buildSearchField( - "Device Name / Product Name", - productNameController, - 300, - ), - _buildSearchResetButtons(), - ], - ); + if (isExtraLargeScreenSize(context)) { + return Row( + spacing: 20, + children: _widgets, + ); + } + + return Wrap( + spacing: 20, + runSpacing: 10, + children: _widgets, + ); } Widget _buildSearchField( From 835dfe8785850f89f1ebb29958c08c2c010aa623 Mon Sep 17 00:00:00 2001 From: fkarmoush Date: Wed, 26 Mar 2025 12:40:25 +0300 Subject: [PATCH 5/5] Rename controller variables in `DeviceSearchFilters` to be private to control access control. --- .../widgets/device_search_filters.dart | 28 +++++++++---------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/lib/pages/device_managment/all_devices/widgets/device_search_filters.dart b/lib/pages/device_managment/all_devices/widgets/device_search_filters.dart index 3910257f..27bcb0de 100644 --- a/lib/pages/device_managment/all_devices/widgets/device_search_filters.dart +++ b/lib/pages/device_managment/all_devices/widgets/device_search_filters.dart @@ -14,32 +14,32 @@ class DeviceSearchFilters extends StatefulWidget { class _DeviceSearchFiltersState extends State with HelperResponsiveLayout { - late final TextEditingController unitNameController; - late final TextEditingController productNameController; + late final TextEditingController _unitNameController; + late final TextEditingController _productNameController; @override void initState() { - unitNameController = TextEditingController(); - productNameController = TextEditingController(); + _unitNameController = TextEditingController(); + _productNameController = TextEditingController(); super.initState(); } @override void dispose() { - unitNameController.dispose(); - productNameController.dispose(); + _unitNameController.dispose(); + _productNameController.dispose(); super.dispose(); } List get _widgets => [ _buildSearchField( "Space Name", - unitNameController, + _unitNameController, 200, ), _buildSearchField( "Device Name / Product Name", - productNameController, + _productNameController, 300, ), _buildSearchResetButtons(), @@ -73,8 +73,8 @@ class _DeviceSearchFiltersState extends State controller: controller, onSubmitted: () { final searchDevicesEvent = SearchDevices( - productName: productNameController.text, - unitName: unitNameController.text, + productName: _productNameController.text, + unitName: _unitNameController.text, searchField: true, ); context.read().add(searchDevicesEvent); @@ -87,14 +87,14 @@ class _DeviceSearchFiltersState extends State return SearchResetButtons( onSearch: () => context.read().add( SearchDevices( - unitName: unitNameController.text, - productName: productNameController.text, + unitName: _unitNameController.text, + productName: _productNameController.text, searchField: true, ), ), onReset: () { - unitNameController.clear(); - productNameController.clear(); + _unitNameController.clear(); + _productNameController.clear(); context.read() ..add(ResetFilters()) ..add(FetchDevices(context));