diff --git a/lib/common/tag_dialog_textfield_dropdown.dart b/lib/common/tag_dialog_textfield_dropdown.dart index 219e03ce..6bc22fc0 100644 --- a/lib/common/tag_dialog_textfield_dropdown.dart +++ b/lib/common/tag_dialog_textfield_dropdown.dart @@ -17,7 +17,8 @@ class TagDialogTextfieldDropdown extends StatefulWidget { }) : super(key: key); @override - _DialogTextfieldDropdownState createState() => _DialogTextfieldDropdownState(); + _DialogTextfieldDropdownState createState() => + _DialogTextfieldDropdownState(); } class _DialogTextfieldDropdownState extends State { @@ -36,6 +37,12 @@ class _DialogTextfieldDropdownState extends State { _focusNode.addListener(() { if (!_focusNode.hasFocus) { + // Call onSelected when focus is lost + final selectedTag = _filteredItems.firstWhere( + (tag) => tag.tag == _controller.text, + orElse: () => Tag(tag: _controller.text), + ); + widget.onSelected(selectedTag); _closeDropdown(); } }); @@ -43,7 +50,9 @@ class _DialogTextfieldDropdownState extends State { void _filterItems() { setState(() { - _filteredItems = widget.items.where((tag) => tag.product?.uuid == widget.product).toList(); + _filteredItems = widget.items + .where((tag) => tag.product?.uuid == widget.product) + .toList(); }); } @@ -112,7 +121,9 @@ class _DialogTextfieldDropdownState extends State { style: Theme.of(context) .textTheme .bodyMedium - ?.copyWith(color: ColorsManager.textPrimaryColor)), + ?.copyWith( + color: ColorsManager + .textPrimaryColor)), onTap: () { _controller.text = tag.tag ?? ''; widget.onSelected(tag); @@ -156,13 +167,15 @@ class _DialogTextfieldDropdownState extends State { controller: _controller, focusNode: _focusNode, onFieldSubmitted: (value) { - final selectedTag = _filteredItems.firstWhere((tag) => tag.tag == value, + final selectedTag = _filteredItems.firstWhere( + (tag) => tag.tag == value, orElse: () => Tag(tag: value)); widget.onSelected(selectedTag); _closeDropdown(); }, onTapOutside: (event) { - widget.onSelected(_filteredItems.firstWhere((tag) => tag.tag == _controller.text, + widget.onSelected(_filteredItems.firstWhere( + (tag) => tag.tag == _controller.text, orElse: () => Tag(tag: _controller.text))); _closeDropdown(); }, diff --git a/lib/pages/spaces_management/tag_model/bloc/add_device_model_bloc.dart b/lib/pages/spaces_management/tag_model/bloc/add_device_model_bloc.dart index 9c617a12..a0081c22 100644 --- a/lib/pages/spaces_management/tag_model/bloc/add_device_model_bloc.dart +++ b/lib/pages/spaces_management/tag_model/bloc/add_device_model_bloc.dart @@ -24,37 +24,22 @@ class AddDeviceTypeModelBloc if (currentState is AddDeviceModelLoaded) { final existingProduct = currentState.selectedProducts.firstWhere( - (p) => p.productId == event.productId, - orElse: () => SelectedProduct( - productId: event.productId, - count: 0, - productName: event.productName, - product: event.product, - ), + (p) => p.productId == event.selectedProduct.productId, + orElse: () => event.selectedProduct, ); List updatedProducts; - if (event.count > 0) { + if (event.selectedProduct.count > 0) { if (!currentState.selectedProducts.contains(existingProduct)) { updatedProducts = [ ...currentState.selectedProducts, - SelectedProduct( - productId: event.productId, - count: event.count, - productName: event.productName, - product: event.product, - ), + event.selectedProduct, ]; } else { updatedProducts = currentState.selectedProducts.map((p) { - if (p.productId == event.productId) { - return SelectedProduct( - productId: p.productId, - count: event.count, - productName: p.productName, - product: p.product, - ); + if (p.productId == event.selectedProduct.productId) { + return event.selectedProduct; } return p; }).toList(); @@ -62,7 +47,7 @@ class AddDeviceTypeModelBloc } else { // Remove the product if the count is 0 updatedProducts = currentState.selectedProducts - .where((p) => p.productId != event.productId) + .where((p) => p.productId != event.selectedProduct.productId) .toList(); } diff --git a/lib/pages/spaces_management/tag_model/bloc/add_device_type_model_event.dart b/lib/pages/spaces_management/tag_model/bloc/add_device_type_model_event.dart index b9018b2b..27f183a6 100644 --- a/lib/pages/spaces_management/tag_model/bloc/add_device_type_model_event.dart +++ b/lib/pages/spaces_management/tag_model/bloc/add_device_type_model_event.dart @@ -10,20 +10,15 @@ abstract class AddDeviceTypeModelEvent extends Equatable { List get props => []; } - class UpdateProductCountEvent extends AddDeviceTypeModelEvent { - final String productId; - final int count; - final String productName; - final ProductModel product; + final SelectedProduct selectedProduct; - UpdateProductCountEvent({required this.productId, required this.count, required this.productName, required this.product}); + UpdateProductCountEvent({required this.selectedProduct}); @override - List get props => [productId, count]; + List get props => [selectedProduct]; } - class InitializeDeviceTypeModel extends AddDeviceTypeModelEvent { final List initialTags; final List addedProducts;