@ -29,9 +29,7 @@ class MyRequestsFragment extends StatelessWidget {
void cancelRequestBottomSheet ( BuildContext context , int requestId ) {
return actionConfirmationBottomSheet (
context: context ,
title: LocaleKeys . cancelRequestPrompt
. tr ( )
. toText ( fontSize: 28 , isBold: true , letterSpacing: - 1.44 ) ,
title: LocaleKeys . cancelRequestPrompt . tr ( ) . toText ( fontSize: 28 , isBold: true , letterSpacing: - 1.44 ) ,
subtitle: LocaleKeys . requestPermanentlyCancelled . tr ( ) ,
actionButtonYes: Expanded (
child: ShowFillButton (
@ -43,10 +41,7 @@ class MyRequestsFragment extends StatelessWidget {
final requestVM = context . read < RequestsVM > ( ) ;
bool status = await requestVM . onActionRequestTapped (
context: context ,
requestStatusEnum: RequestStatusEnum . cancelled ,
requestId: requestId ) ;
bool status = await requestVM . onActionRequestTapped ( context: context , requestStatusEnum: RequestStatusEnum . cancelled , requestId: requestId ) ;
if ( status ) {
await requestVM . getRequests ( isNeedToRebuild: true ) ;
}
@ -74,8 +69,7 @@ class MyRequestsFragment extends StatelessWidget {
return false ;
}
if ( requestStatusEnum = = RequestStatusEnum . pending | |
requestStatusEnum = = RequestStatusEnum . submitted ) {
if ( requestStatusEnum = = RequestStatusEnum . pending | | requestStatusEnum = = RequestStatusEnum . submitted ) {
return true ;
}
return false ;
@ -83,8 +77,40 @@ class MyRequestsFragment extends StatelessWidget {
@ override
Widget build ( BuildContext context ) {
return Consumer (
builder: ( BuildContext context , RequestsVM requestsVM , Widget ? child ) {
/ / Access guard: Only dealerships can access Special Requests
if ( AppState ( ) . userType ! = UserType . providerDealer & & AppState ( ) . currentAppType = = AppType . provider ) {
return Scaffold (
appBar: CustomAppBar (
title: LocaleKeys . manageRequests . tr ( ) ,
isRemoveBackButton: true ,
) ,
body: Center (
child: Column (
mainAxisAlignment: MainAxisAlignment . center ,
children: [
Icon (
Icons . block ,
size: 64 ,
color: MyColors . lightTextColor ,
) ,
16. height ,
LocaleKeys . accessDenied . tr ( ) . toText (
fontSize: 20 ,
isBold: true ,
) ,
8. height ,
" This feature is only available for Dealerships. " . toText (
fontSize: 14 ,
color: MyColors . lightTextColor ,
textAlign: TextAlign . center ,
) ,
] ,
) . paddingAll ( 24 ) ,
) ,
) ;
}
return Consumer ( builder: ( BuildContext context , RequestsVM requestsVM , Widget ? child ) {
return Scaffold (
appBar: CustomAppBar (
title: LocaleKeys . manageRequests . tr ( ) ,
@ -93,9 +119,7 @@ class MyRequestsFragment extends StatelessWidget {
if ( AppState ( ) . currentAppType = = AppType . provider ) . . . [
Padding (
padding: const EdgeInsets . only ( top: 8 , bottom: 8 , right: 15 ) ,
child: const Icon ( Icons . messenger_outline_rounded ,
color: Colors . black , size: 18 )
. toContainer (
child: const Icon ( Icons . messenger_outline_rounded , color: Colors . black , size: 18 ) . toContainer (
borderRadius: 80 ,
borderColor: MyColors . lightGreyEFColor ,
isEnabledBorder: true ,
@ -105,9 +129,7 @@ class MyRequestsFragment extends StatelessWidget {
} )
] ,
Padding (
padding: EdgeInsets . only (
top: requestsVM . requestsFiltersCounter > 0 ? 20 : 0 ,
right: 21 ) ,
padding: EdgeInsets . only ( top: requestsVM . requestsFiltersCounter > 0 ? 20 : 0 , right: 21 ) ,
child: Badge (
isLabelVisible: requestsVM . requestsFiltersCounter > 0 ,
largeSize: 15 ,
@ -121,8 +143,7 @@ class MyRequestsFragment extends StatelessWidget {
} ) ,
] ,
) . toViewOnly ( context , onTap: ( ) {
navigateWithName ( context , AppRoutes . loginWithPassword ,
arguments: false ) ;
navigateWithName ( context , AppRoutes . loginWithPassword , arguments: false ) ;
} ) ,
body: Container (
color: MyColors . backgroundColor ,
@ -134,8 +155,7 @@ class MyRequestsFragment extends StatelessWidget {
FiltersList (
filterList: requestsVM . requestsTypeFilterOptions ,
onFilterTapped: ( index , selectedFilterId ) {
requestsVM . applyFilterOnRequestsVM (
requestsTypeEnum: selectedFilterId . toRequestTypeEnum ( ) ) ;
requestsVM . applyFilterOnRequestsVM ( requestsTypeEnum: selectedFilterId . toRequestTypeEnum ( ) ) ;
} ,
) ,
/ / Show condition filters for all request types
@ -144,31 +164,27 @@ class MyRequestsFragment extends StatelessWidget {
FiltersList (
filterList: requestsVM . sparePartsConditionFilterOptions ,
onFilterTapped: ( index , selectedFilterId ) {
requestsVM . applySparePartsConditionFilter (
conditionId: selectedFilterId ) ;
requestsVM . applySparePartsConditionFilter ( conditionId: selectedFilterId ) ;
} ,
) ,
] ,
8. height ,
Expanded (
child: RefreshIndicator (
onRefresh: ( ) async = >
await requestsVM . getRequestsBasedOnFilters ( ) ,
onRefresh: ( ) async = > await requestsVM . getRequestsBasedOnFilters ( ) ,
child: requestsVM . state = = ViewState . busy
? const RequestsListShimmer ( itemCount: 5 )
: requestsVM . myFilteredRequests . isEmpty
? Column (
mainAxisAlignment: MainAxisAlignment . center ,
children: [
LocaleKeys . noRequeststoShow . tr ( ) . toText (
fontSize: 16 , color: MyColors . lightTextColor ) ,
LocaleKeys . noRequeststoShow . tr ( ) . toText ( fontSize: 16 , color: MyColors . lightTextColor ) ,
if ( requestsVM . requestsFiltersCounter > 0 ) . . . [
8. height ,
InkWell (
onTap: ( ) async {
requestsVM . clearRequestsFilters ( ) ;
await requestsVM
. getRequestsBasedOnFilters ( ) ;
await requestsVM . getRequestsBasedOnFilters ( ) ;
} ,
child: LocaleKeys . clearFilters . tr ( ) . toText (
fontSize: 14 ,
@ -187,76 +203,43 @@ class MyRequestsFragment extends StatelessWidget {
secondaryBackground: Container (
color: const Color ( 0xFFDD0505 ) ,
child: Row (
crossAxisAlignment:
CrossAxisAlignment . center ,
crossAxisAlignment: CrossAxisAlignment . center ,
mainAxisAlignment: MainAxisAlignment . end ,
children: [
LocaleKeys . cancel
. tr ( )
. toText (
fontSize: 15 ,
fontWeight: MyFonts . Medium ,
height: 23 / 25 ,
color: MyColors . white )
. margin ( right: 23 ) ,
LocaleKeys . cancel . tr ( ) . toText ( fontSize: 15 , fontWeight: MyFonts . Medium , height: 23 / 25 , color: MyColors . white ) . margin ( right: 23 ) ,
] ,
) ,
) ,
dragStartBehavior: DragStartBehavior . start ,
direction: shouldDismiss ( requestsVM
. myFilteredRequests [ index ]
. requestStatus )
? DismissDirection . endToStart
: DismissDirection . none ,
confirmDismiss:
( DismissDirection direction ) async {
cancelRequestBottomSheet ( context ,
requestsVM . myFilteredRequests [ index ] . id ) ;
direction: shouldDismiss ( requestsVM . myFilteredRequests [ index ] . requestStatus ) ? DismissDirection . endToStart : DismissDirection . none ,
confirmDismiss: ( DismissDirection direction ) async {
cancelRequestBottomSheet ( context , requestsVM . myFilteredRequests [ index ] . id ) ;
return ;
} ,
child: RequestItem (
request:
requestsVM . myFilteredRequests [ index ] ,
request: requestsVM . myFilteredRequests [ index ] ,
shouldShowStatuses: true ,
onTap: ( ) async {
RequestModel request =
requestsVM . myFilteredRequests [ index ] ;
requestsVM . updateCurrentSelectedRequest (
request ) ;
RequestModel request = requestsVM . myFilteredRequests [ index ] ;
requestsVM . updateCurrentSelectedRequest ( request ) ;
log ( " request.requestStatus: ${ request . requestStatus } " ) ;
if ( request . requestStatus = =
RequestStatusEnum . pending | |
request . requestStatus = =
RequestStatusEnum . cancelled | |
request . requestStatus = =
RequestStatusEnum . expired ) {
if ( request . requestStatus = = RequestStatusEnum . pending | |
request . requestStatus = = RequestStatusEnum . cancelled | |
request . requestStatus = = RequestStatusEnum . expired ) {
return ;
}
if ( AppState ( ) . currentAppType = =
AppType . provider ) {
RequestDetailPageArguments
requestDetailPageArguments =
RequestDetailPageArguments (
requestIndex: index ,
requestModel: request ) ;
navigateWithName ( context ,
AppRoutes . requestsDetailPage ,
arguments:
requestDetailPageArguments ) ;
if ( AppState ( ) . currentAppType = = AppType . provider ) {
RequestDetailPageArguments requestDetailPageArguments = RequestDetailPageArguments ( requestIndex: index , requestModel: request ) ;
navigateWithName ( context , AppRoutes . requestsDetailPage , arguments: requestDetailPageArguments ) ;
} else {
requestsVM . myFilteredRequests [ index ]
. offerCount = 0 ;
requestsVM . myFilteredRequests [ index ] . offerCount = 0 ;
requestsVM . notifyListeners ( ) ;
navigateWithName (
context , AppRoutes . offersListPage ,
arguments: request . id ) ;
navigateWithName ( context , AppRoutes . offersListPage , arguments: request . id ) ;
}
} ) . toViewOnly ( context , onTap: ( ) {
navigateWithName (
context , AppRoutes . loginWithPassword ,
arguments: false ) ;
navigateWithName ( context , AppRoutes . loginWithPassword , arguments: false ) ;
} ) ,
) ;
} ,
@ -264,8 +247,7 @@ class MyRequestsFragment extends StatelessWidget {
return 16. height ;
} ,
itemCount: requestsVM . myFilteredRequests . length ,
padding: const EdgeInsets . only (
left: 16 , right: 16 , bottom: 16 , top: 8 ) ,
padding: const EdgeInsets . only ( left: 16 , right: 16 , bottom: 16 , top: 8 ) ,
) ,
) )
] ,
@ -273,16 +255,14 @@ class MyRequestsFragment extends StatelessWidget {
) ,
floatingActionButton: AppState ( ) . currentAppType = = AppType . customer
? FloatingActionButton (
onPressed: ( ) = >
navigateWithName ( context , AppRoutes . createRequestPage ) ,
onPressed: ( ) = > navigateWithName ( context , AppRoutes . createRequestPage ) ,
backgroundColor: MyColors . darkPrimaryColor ,
child: const Icon (
Icons . add ,
color: MyColors . white ,
) ,
) . toViewOnly ( context , onTap: ( ) {
navigateWithName ( context , AppRoutes . loginWithPassword ,
arguments: false ) ;
navigateWithName ( context , AppRoutes . loginWithPassword , arguments: false ) ;
} )
: null ,
) ;