@ -1,18 +1,21 @@
import ' package:flutter/material.dart ' ;
import ' package:mc_common_app/extensions/int_extensions.dart ' ;
import ' package:mc_common_app/extensions/string_extensions.dart ' ;
import ' package:mc_common_app/generated/locale_keys.g.dart ' ;
import ' package:mc_common_app/models/services_models/item_model.dart ' ;
import ' package:mc_common_app/theme/colors.dart ' ;
import ' package:mc_common_app/utils/navigator.dart ' ;
import ' package:mc_common_app/widgets/button/show_fill_button.dart ' ;
import ' package:mc_common_app/widgets/checkbox_with_title_desc.dart ' ;
import ' package:mc_common_app/widgets/extensions/extensions_widget.dart ' ;
import ' package:mc_common_app/widgets/txt_field.dart ' ;
import ' package:easy_localization/easy_localization.dart ' ;
class ItemsSelectionSheet extends StatefulWidget {
final List < ItemData > serviceItems ;
final Function ( List < ItemData > ) onItemCopied ;
const ItemsSelectionSheet ( this . serviceItems , { required this . onItemCopied , Key ? key } ) : super ( key: key ) ;
const ItemsSelectionSheet ( this . serviceItems , { required this . onItemCopied , super . key } ) ;
@ override
State < ItemsSelectionSheet > createState ( ) = > _ItemsSelectionSheetState ( ) ;
@ -21,34 +24,39 @@ class ItemsSelectionSheet extends StatefulWidget {
class _ItemsSelectionSheetState extends State < ItemsSelectionSheet > {
bool isAllItemsSelected = false ;
List < ItemData > ? tempItems ;
List < ItemData > ? filteredItems ; / / To store filtered items based on search query
String searchQuery = " " ; / / To store the search query
@ override
void initState ( ) {
super . initState ( ) ;
/ / tempItems = List . from ( widget . serviceItems ) ;
/ / tempItems = [ . . . widget . serviceItems ] ;
/ / tempItems . addAll ( widget . serviceItems ) ;
tempItems = widget . serviceItems
. map (
( item ) = > ItemData . fromJson ( item . toJson ( ) )
tempItems = widget . serviceItems . map ( ( item ) = > ItemData . fromJson ( item . toJson ( ) ) ) . toList ( ) ;
filteredItems = List . from ( tempItems ! ) ; / / Initially show all items
}
/ / Method to filter items based on search query
void filterItems ( String query ) {
setState ( ( ) {
searchQuery = query ;
filteredItems = tempItems ! . where ( ( item ) {
return item . name ! . toLowerCase ( ) . contains ( query . toLowerCase ( ) ) | |
item . description ! . toLowerCase ( ) . contains (
query . toLowerCase ( ) ,
) ;
} ) . toList ( ) ;
} ) ;
}
selectAllTempItems ( bool value ) {
for ( var element in filteredItems ? ? [ ] ) {
element . isUpdateOrSelected = value ;
}
setState ( ( ) { } ) ;
}
/ / ItemData (
/ / id: item . id ,
/ / name: item . name ,
/ / price: item . price ,
/ / manufactureDate: item . manufactureDate ,
/ / description: item . description ,
/ / pictureUrl: item . pictureUrl ,
/ / companyId: item . companyId ,
/ / serviceProviderServiceId: item . serviceProviderServiceId ,
/ / isActive: item . isActive ,
/ / isAllowAppointment: item . isAllowAppointment ,
/ / isAppointmentCompanyLoc: item . isAppointmentCompanyLoc ,
/ / isAppointmentCustomerLoc: item . isAppointmentCompanyLoc ,
/ / isUpdateOrSelected: item . isUpdateOrSelected ,
/ / ) ,
)
. toList ( ) ;
updateTempItem ( int index , bool value ) {
filteredItems ! [ index ] . isUpdateOrSelected = value ;
setState ( ( ) { } ) ;
}
@ override
@ -60,69 +68,58 @@ class _ItemsSelectionSheetState extends State<ItemsSelectionSheet> {
child: Column (
crossAxisAlignment: CrossAxisAlignment . start ,
children: [
" Select Items To Copy " . toText ( fontSize: 16 , isBold: true ) ,
LocaleKeys . pleaseSelectItems . tr ( ) . toText ( fontSize: 18 , isBold: true ) ,
12. height ,
TxtField (
hint: " Search Items " ,
onChanged: ( v ) { } ,
value: searchQuery ,
hint: LocaleKeys . searchItems . tr ( ) ,
onChanged: ( v ) {
filterItems ( v ) ; / / Filter items when the user types in the text field
} ,
) ,
6. height ,
Row (
mainAxisAlignment: MainAxisAlignment . spaceBetween ,
children: [
Row (
children: [
Checkbox (
/ / value: context . watch < ServiceVM > ( ) . isAllSelected ,
GestureDetector (
onTap: ( ) {
isAllItemsSelected = false ;
selectAllTempItems ( false ) ;
} ,
child: Row (
mainAxisAlignment: MainAxisAlignment . end ,
children: [
SizedBox (
height: 30 ,
width: 30 ,
child: Checkbox (
value: isAllItemsSelected ,
onChanged: ( v ) {
isAllItemsSelected = v ? ? false ;
selectAllTempItems ( v ? ? false ) ;
if ( v = = null ) return ;
isAllItemsSelected = v ;
selectAllTempItems ( v ) ;
} ,
) ,
" Select All " . toText (
isBold: true ,
)
] ,
) ,
Container (
alignment: Alignment . centerRight ,
child: " Unselect All " . toText (
color: MyColors . primaryColor ,
isUnderLine: true ,
isBold: true ,
) ,
margin: const EdgeInsets . symmetric ( horizontal: 14 , vertical: 7 ) ,
) . onPress ( ( ) {
isAllItemsSelected = false ;
selectAllTempItems ( false ) ;
} ) ,
] ,
LocaleKeys . selectAll . tr ( ) . toText ( fontSize: 14 ) ,
] ,
) ,
) ,
Flexible (
child: ListView . separated (
itemBuilder: ( context , index ) {
return Row (
mainAxisAlignment: MainAxisAlignment . start ,
return CheckBoxWithTitleDescription (
crossAxisAlignment: CrossAxisAlignment . center ,
children: [
Checkbox (
value: tempItems ! [ index ] . isUpdateOrSelected ,
onChanged: ( v ) {
isAllItemsSelected = false ;
updateTempItem ( index , v ? ? false ) ;
} ,
) ,
Expanded (
child: tempItems ! [ index ] . name . toString ( ) . toText ( fontSize: 16 , isBold: true ) ,
) ,
] ,
isSelected: filteredItems ! [ index ] . isUpdateOrSelected ? ? false ,
title: filteredItems ! [ index ] . name . toString ( ) ,
description: filteredItems ! [ index ] . description . toString ( ) ,
onSelection: ( bool v ) {
isAllItemsSelected = false ;
updateTempItem ( index , v ) ;
} ,
) ;
} ,
separatorBuilder: ( context , index ) {
return const Divider ( ) ;
} ,
itemCount: temp Items! . length ,
itemCount: filtered Items! . length , / / Use filtered items list
) . toWhiteContainer ( width: double . infinity ) ,
) ,
12. height ,
@ -130,7 +127,7 @@ class _ItemsSelectionSheetState extends State<ItemsSelectionSheet> {
title: " Copy Selected Item " ,
maxWidth: double . infinity ,
onPressed: ( ) {
widget . onItemCopied ( temp Items ? ? [ ] ) ;
widget . onItemCopied ( filtered Items ? ? [ ] ) ;
pop ( context ) ;
} ,
) ,
@ -138,16 +135,4 @@ class _ItemsSelectionSheetState extends State<ItemsSelectionSheet> {
) ,
) ;
}
selectAllTempItems ( bool value ) {
for ( var element in tempItems ? ? [ ] ) {
element . isUpdateOrSelected = value ;
}
setState ( ( ) { } ) ;
}
updateTempItem ( int index , bool value ) {
tempItems ! [ index ] . isUpdateOrSelected = value ;
setState ( ( ) { } ) ;
}
}