From 471ce223e1bcc700b3f1e623896fdf0ebc9de116 Mon Sep 17 00:00:00 2001 From: Sikander Saleem Date: Wed, 20 May 2026 18:20:27 +0300 Subject: [PATCH] bug 1955 fixed. --- .../device_transfer/device_filter_screen.dart | 26 +++++++- .../multiple_item_drop_down_menu.dart | 59 +++++++++++++++++-- .../equipment/asset_status_buttons.dart | 23 +++++++- 3 files changed, 97 insertions(+), 11 deletions(-) diff --git a/lib/modules/tm_module/device_transfer/device_filter_screen.dart b/lib/modules/tm_module/device_transfer/device_filter_screen.dart index 1062bedb..c09e0291 100644 --- a/lib/modules/tm_module/device_transfer/device_filter_screen.dart +++ b/lib/modules/tm_module/device_transfer/device_filter_screen.dart @@ -54,12 +54,30 @@ class _DeviceFilterScreenState extends State { // Initialize selected departments from filter if (filter.departments != null && filter.departments!.isNotEmpty) { - _selectedDepartments = departmentProvider.items.where((dept) => filter.departments!.contains(dept.name)).toList(); + _selectedDepartments = []; + for (var deptName in filter.departments!) { + final match = departmentProvider.items.firstWhere( + (dept) => dept.name == deptName, + orElse: () => Lookup(), + ); + if (match.id != null) { + _selectedDepartments.add(match); + } + } } // Initialize selected sites from filter if (filter.sites != null && filter.sites!.isNotEmpty) { - _selectedSites = siteProvider.items.where((site) => filter.sites!.contains(site.name)).toList(); + _selectedSites = []; + for (var siteName in filter.sites!) { + final match = siteProvider.items.firstWhere( + (site) => site.name == siteName, + orElse: () => Site(), + ); + if (match.id != null) { + _selectedSites.add(match); + } + } } loading = false; @@ -110,8 +128,9 @@ class _DeviceFilterScreenState extends State { MultipleItemDropDownMenu( context: context, title: context.translation.byDepartment, + initialValue: _selectedDepartments, showAsBottomSheet: true, - backgroundColor: context.isDark ? AppColor.neutral60 : Colors.white, + // backgroundColor: context.isDark ? AppColor.neutral60 : Colors.white, // backgroundColor: AppColor.fieldBgColor(context), showShadow: true, height: 56.toScreenHeight, @@ -128,6 +147,7 @@ class _DeviceFilterScreenState extends State { MultipleItemDropDownMenu( context: context, title: context.translation.bySite, + initialValue: _selectedSites, showAsBottomSheet: true, // backgroundColor: AppColor.fieldBgColor(context), backgroundColor: context.isDark ? AppColor.neutral60 : Colors.white, diff --git a/lib/new_views/common_widgets/multiple_item_drop_down_menu.dart b/lib/new_views/common_widgets/multiple_item_drop_down_menu.dart index e1b1ca70..c1649652 100644 --- a/lib/new_views/common_widgets/multiple_item_drop_down_menu.dart +++ b/lib/new_views/common_widgets/multiple_item_drop_down_menu.dart @@ -5,6 +5,7 @@ import 'package:test_sa/extensions/context_extension.dart'; import 'package:test_sa/extensions/int_extensions.dart'; import 'package:test_sa/extensions/text_extensions.dart'; import 'package:test_sa/extensions/widget_extensions.dart'; +import 'package:test_sa/models/lookup.dart'; import 'package:test_sa/new_views/common_widgets/app_loading_manager.dart'; import 'package:test_sa/providers/loading_list_notifier.dart'; import 'package:test_sa/views/widgets/bottom_sheets/selection_bottom_sheet.dart'; @@ -71,8 +72,23 @@ class _MultipleItemDropDownMenuState widget.initialValue!.any((init) => init.name == element.name)).toList(); + // Collect matches based on identifier or name + // For Lookup: compare by id/value; For others: compare by identifier/name + final results = sourceList.where((element) { + return widget.initialValue!.any((init) { + // Try Lookup-specific comparison first (id/value) + if (element is Lookup && init is Lookup) { + return (element.id != null && element.id == init.id) || + (element.value != null && element.value == init.value); + } + // Fallback to identifier comparison + if (element.identifier != null && init.identifier != null) { + return element.identifier == init.identifier; + } + // Last resort: name comparison + return element.name != null && element.name == init.name; + }); + }).toList(); if (results.isNotEmpty) { _selectedItem @@ -100,8 +116,24 @@ class _MultipleItemDropDownMenuState widget.initialValue!.any((init) => init.name == element.name)).toList(); + // Collect matches based on identifier or name + // For Lookup: compare by id/value; For others: compare by identifier/name + final results = sourceList.where((element) { + return widget.initialValue!.any((init) { + // Try Lookup-specific comparison first (id/value) + if (element is Lookup && init is Lookup) { + return (element.id != null && element.id == init.id) || + (element.value != null && element.value == init.value); + } + // Fallback to identifier comparison + if (element.identifier != null && init.identifier != null) { + return element.identifier == init.identifier; + } + // Last resort: name comparison + return element.name != null && element.name == init.name; + }); + }).toList(); + if (results.isNotEmpty) { _selectedItem ..clear() @@ -126,9 +158,24 @@ class _MultipleItemDropDownMenuState old.name == widget.initialValue[i].name)) { + final current = widget.initialValue[i]; + final hasMatch = oldWidget.initialValue.any((old) { + // Try Lookup-specific comparison first (id/value) + if (old is Lookup && current is Lookup) { + return (old.id != null && old.id == current.id) || + (old.value != null && old.value == current.value); + } + // Fallback to identifier comparison + if (old.identifier != null && current.identifier != null) { + return old.identifier == current.identifier; + } + // Last resort: name comparison + return old.name != null && old.name == current.name; + }); + + if (!hasMatch) { return true; } } diff --git a/lib/views/widgets/equipment/asset_status_buttons.dart b/lib/views/widgets/equipment/asset_status_buttons.dart index ca16d654..572eba3e 100644 --- a/lib/views/widgets/equipment/asset_status_buttons.dart +++ b/lib/views/widgets/equipment/asset_status_buttons.dart @@ -29,7 +29,16 @@ class _AssetStatusButtonsState extends State { WidgetsFlutterBinding.ensureInitialized().addPostFrameCallback((timeStamp) { final provider = Provider.of(context, listen: false); provider.getData().then((value) { - if (widget.initialValue != null) _selectedIndex = provider.items.indexOf(widget.initialValue!); + if (widget.initialValue != null) { + // Find matching item by id or value, not by object identity + _selectedIndex = provider.items.indexWhere((item) => + (item.id != null && item.id == widget.initialValue!.id) || + (item.value != null && item.value == widget.initialValue!.value) + ); + if (_selectedIndex == -1) _selectedIndex = 0; + // Adjust for "All Assets" option at index 0 + _selectedIndex += 1; + } setState(() {}); }); }); @@ -40,7 +49,17 @@ class _AssetStatusButtonsState extends State { if (widget.initialValue != oldWidget.initialValue) { final provider = Provider.of(context, listen: false); if (widget.initialValue != null) { - _selectedIndex = provider.items.indexOf(widget.initialValue!); + // Find matching item by id or value, not by object identity + _selectedIndex = provider.items.indexWhere((item) => + (item.id != null && item.id == widget.initialValue!.id) || + (item.value != null && item.value == widget.initialValue!.value) + ); + if (_selectedIndex == -1) { + _selectedIndex = 0; + } else { + // Adjust for "All Assets" option at index 0 + _selectedIndex += 1; + } } else { _selectedIndex = 0; }