@ -1,15 +1,16 @@
import ' package:mc_common_app/generated/locale_keys.g.dart ' ;
import ' package:mc_common_app/view_models/service_view_model.dart ' ;
import ' package:car_provider_app/views/branch_management/services/duplication/sheet/approved_branches_list_sheet.dart ' ;
import ' package:car_provider_app/views/branch_management/services/duplication/sheet/approved_branches_list_sheet.dart ' ;
import ' package:car_provider_app/views/branch_management/services/duplication/sheet/items_selection_sheet.dart ' ;
import ' package:car_provider_app/views/branch_management/services/duplication/sheet/items_selection_sheet.dart ' ;
import ' package:easy_localization/easy_localization.dart ' ;
import ' package:flutter/material.dart ' ;
import ' package:flutter/material.dart ' ;
import ' package:flutter_svg/flutter_svg.dart ' ;
import ' package:mc_common_app/classes/consts.dart ' ;
import ' package:mc_common_app/classes/consts.dart ' ;
import ' package:mc_common_app/extensions/int_extensions.dart ' ;
import ' package:mc_common_app/extensions/int_extensions.dart ' ;
import ' package:mc_common_app/extensions/string_extensions.dart ' ;
import ' package:mc_common_app/extensions/string_extensions.dart ' ;
import ' package: flutter_svg/flutter_sv g.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/models/services_models/item_model.dart ' ;
import ' package:mc_common_app/theme/colors.dart ' ;
import ' package:mc_common_app/theme/colors.dart ' ;
import ' package:mc_common_app/utils/utils.dart ' ;
import ' package:mc_common_app/utils/utils.dart ' ;
import ' package:mc_common_app/view_models/service_view_model.dart ' ;
import ' package:mc_common_app/widgets/bottom_sheet.dart ' ;
import ' package:mc_common_app/widgets/bottom_sheet.dart ' ;
import ' package:mc_common_app/widgets/button/show_fill_button.dart ' ;
import ' package:mc_common_app/widgets/button/show_fill_button.dart ' ;
import ' package:mc_common_app/widgets/common_widgets/app_bar.dart ' ;
import ' package:mc_common_app/widgets/common_widgets/app_bar.dart ' ;
@ -17,12 +18,11 @@ import 'package:mc_common_app/widgets/dropdown/dropdown_text.dart';
import ' package:mc_common_app/widgets/empty_widget.dart ' ;
import ' package:mc_common_app/widgets/empty_widget.dart ' ;
import ' package:mc_common_app/widgets/extensions/extensions_widget.dart ' ;
import ' package:mc_common_app/widgets/extensions/extensions_widget.dart ' ;
import ' package:provider/provider.dart ' ;
import ' package:provider/provider.dart ' ;
import ' package:easy_localization/easy_localization.dart ' ;
class MatchedServicesPage extends StatefulWidget {
class MatchedServicesPage extends StatefulWidget {
final MatchServicesArguments ? matchServicesArguments ;
final MatchServicesArguments ? matchServicesArguments ;
const MatchedServicesPage ( this . matchServicesArguments , { Key ? key } ) : super ( key: key ) ;
const MatchedServicesPage ( this . matchServicesArguments , { super . key } ) ;
@ override
@ override
State < MatchedServicesPage > createState ( ) = > _MatchedServicesPageState ( ) ;
State < MatchedServicesPage > createState ( ) = > _MatchedServicesPageState ( ) ;
@ -39,7 +39,11 @@ class _MatchedServicesPageState extends State<MatchedServicesPage> {
}
}
getMatchedServices ( ) {
getMatchedServices ( ) {
serviceVM . getAllMatchedServices ( widget . matchServicesArguments ! . oldBranch , widget . matchServicesArguments ! . newBranch , widget . matchServicesArguments ! . categoryId ) ;
serviceVM . getAllMatchedServices (
widget . matchServicesArguments ! . oldBranch ,
widget . matchServicesArguments ! . newBranch ,
widget . matchServicesArguments ! . categoryId ,
) ;
}
}
@ override
@ override
@ -53,47 +57,41 @@ class _MatchedServicesPageState extends State<MatchedServicesPage> {
height: double . infinity ,
height: double . infinity ,
child: Column (
child: Column (
children: [
children: [
DropDownText ( widget . matchServicesArguments ! . oldBranchName ) . toContainer (
12. height ,
padding: const EdgeInsets . only (
DropDownText (
left: 14 ,
title: widget . matchServicesArguments ! . oldBranchName ,
right: 14 ,
showDropDownIcon: false ,
top: 21 ,
) ,
) ,
) ,
12. height ,
12. height ,
Row (
GestureDetector (
mainAxisAlignment: MainAxisAlignment . spaceBetween ,
onTap: ( ) {
children: [
/ / Toggle the checkbox value when the row is tapped
Row (
bool newValue = ! context . read < ServiceVM > ( ) . isAllSelected ;
children: [
serviceVM . selectAllServices ( newValue ) ;
Checkbox (
} ,
child: Row (
mainAxisAlignment: MainAxisAlignment . end ,
children: [
SizedBox (
height: 30 ,
width: 30 ,
child: Checkbox (
value: context . watch < ServiceVM > ( ) . isAllSelected ,
value: context . watch < ServiceVM > ( ) . isAllSelected ,
onChanged: ( v ) {
onChanged: ( v ) {
serviceVM . selectAllServices ( v ? ? false ) ;
serviceVM . selectAllServices ( v ? ? false ) ;
} ,
} ,
) ,
) ,
LocaleKeys . selectAll . tr ( ) . toText ( isBold: true )
) ,
] ,
LocaleKeys . selectAll . tr ( ) . toText ( fontSize: 14 ) ,
) ,
] ,
Container (
) ,
alignment: Alignment . centerRight ,
margin: const EdgeInsets . symmetric ( horizontal: 14 , vertical: 7 ) ,
child: LocaleKeys . unselectAll . tr ( ) . toText (
color: MyColors . primaryColor ,
isUnderLine: true ,
isBold: true ,
) ,
) . onPress ( ( ) {
serviceVM . selectAllServices ( false ) ;
} ) ,
] ,
) ,
) ,
12. height ,
12. height ,
Expanded (
Expanded (
child: Consumer < ServiceVM > ( builder: ( context , model , _ ) {
child: Consumer < ServiceVM > ( builder: ( context , ServiceVM serviceVM , _ ) {
if ( model . matchedServices = = null ) {
if ( serviceVM . matchedServices = = null ) {
return const Center ( child: CircularProgressIndicator ( ) ) ;
return const Center ( child: CircularProgressIndicator ( ) ) ;
} else if ( model . matchedServices ! . isEmpty ) {
} else if ( serviceVM . matchedServices ! . isEmpty ) {
return EmptyWidget ( text: LocaleKeys . noServicesAvailable . tr ( ) , isWrappedColumn: false ) ;
return EmptyWidget ( text: LocaleKeys . noServicesAvailable . tr ( ) , isWrappedColumn: false ) ;
}
}
return ListView . separated (
return ListView . separated (
@ -103,13 +101,13 @@ class _MatchedServicesPageState extends State<MatchedServicesPage> {
crossAxisAlignment: CrossAxisAlignment . start ,
crossAxisAlignment: CrossAxisAlignment . start ,
children: [
children: [
Checkbox (
Checkbox (
value: model . matchedServices ! [ index ] . isExpandedOrSelected ,
value: serviceVM . matchedServices ! [ index ] . isExpandedOrSelected ,
onChanged: ( v ) {
onChanged: ( v ) {
if ( model . matchedServices ! [ index ] . serviceItems ! . isEmpty ) {
if ( serviceVM . matchedServices ! [ index ] . serviceItems ! . isEmpty ) {
Utils . showToast ( LocaleKeys . no ItemsToShow . tr ( ) ) ;
Utils . showToast ( LocaleKeys . no Available Items. tr ( ) ) ;
} else {
} else {
model . matchedServices ! [ index ] . isExpandedOrSelected = v ? ? false ;
serviceVM . matchedServices ! [ index ] . isExpandedOrSelected = v ? ? false ;
model. updateServiceItem ( index , model . matchedServices ! [ index ] . isExpandedOrSelected ) ;
serviceVM. updateServiceItem ( index , serviceVM . matchedServices ! [ index ] . isExpandedOrSelected ) ;
}
}
} ,
} ,
) ,
) ,
@ -118,8 +116,9 @@ class _MatchedServicesPageState extends State<MatchedServicesPage> {
mainAxisAlignment: MainAxisAlignment . start ,
mainAxisAlignment: MainAxisAlignment . start ,
crossAxisAlignment: CrossAxisAlignment . start ,
crossAxisAlignment: CrossAxisAlignment . start ,
children: [
children: [
model . matchedServices ! [ index ] . serviceDescription . toString ( ) . toText ( fontSize: 16 , isBold: true ) ,
serviceVM . matchedServices ! [ index ] . serviceDescription . toString ( ) . toText ( fontSize: 16 , isBold: true ) ,
" ${ model . matchedServices ! [ index ] . serviceItems ! . where ( ( c ) = > c . isUpdateOrSelected = = true ) . length } items selected out of ${ model . matchedServices ! [ index ] . serviceItems ! . length } " . toText ( color: MyColors . lightTextColor )
" ${ serviceVM . matchedServices ! [ index ] . serviceItems ! . where ( ( c ) = > c . isUpdateOrSelected = = true ) . length } items selected out of ${ serviceVM . matchedServices ! [ index ] . serviceItems ! . length } "
. toText ( color: MyColors . lightTextColor )
] ,
] ,
) ,
) ,
) ,
) ,
@ -134,9 +133,9 @@ class _MatchedServicesPageState extends State<MatchedServicesPage> {
showMyBottomSheet (
showMyBottomSheet (
context ,
context ,
child: ItemsSelectionSheet (
child: ItemsSelectionSheet (
model . matchedServices ! [ index ] . serviceItems ? ? [ ] ,
serviceVM . matchedServices ! [ index ] . serviceItems ? ? [ ] ,
onItemCopied: ( List < ItemData > selected ) {
onItemCopied: ( List < ItemData > selected ) {
model . copyItems ( index , selected ) ;
serviceVM . copyItems ( index , selected ) ;
} ,
} ,
) ,
) ,
) ;
) ;
@ -147,7 +146,7 @@ class _MatchedServicesPageState extends State<MatchedServicesPage> {
return 8. height ;
return 8. height ;
} ,
} ,
padding: const EdgeInsets . symmetric ( horizontal: 14 ) ,
padding: const EdgeInsets . symmetric ( horizontal: 14 ) ,
itemCount: model . matchedServices ! . length ,
itemCount: serviceVM . matchedServices ! . length ,
) ;
) ;
} ) ,
} ) ,
) ,
) ,
@ -164,7 +163,7 @@ class _MatchedServicesPageState extends State<MatchedServicesPage> {
} ,
} ,
) ,
) ,
] ,
] ,
) ,
) .padding ( const EdgeInsets . symmetric ( horizontal: 14 ) ) ,
) ,
) ,
) ;
) ;
}
}