diff --git a/lib/controllers/api_routes/urls.dart b/lib/controllers/api_routes/urls.dart index 7c742eef..7dda4726 100644 --- a/lib/controllers/api_routes/urls.dart +++ b/lib/controllers/api_routes/urls.dart @@ -35,9 +35,11 @@ class URLs { static get nurseDashboardCountUrl=> '$_baseUrl/ServiceRequest/GetDashboardNurseCount'; static get nurseDashboardDetailsUrl=> '$_baseUrl/ServiceRequest/GetDashboardNurseDetails'; static get nurseRejectUrl=> '$_baseUrl/ServiceRequest/NurseReject'; - static get nurseAcceptUrl=> '$_baseUrl/ServiceRequest/NurseAccept'; static get engineerStopTimer=> '$_baseUrl/ServiceRequest/EngineerStopTimer'; + static get nurseConfirmEngineerArrivedUrl=> '$_baseUrl/ServiceRequest/NurseConfirm'; static get nurseConfirmUrl=> '$_baseUrl/ServiceRequest/NurseConfirm'; + static get nurseRejectEngineerArrivedUrl=> '$_baseUrl/ServiceRequest/NurseNotArrive'; + static get nurseConfirmEngineerArrivalUrl=> '$_baseUrl/ServiceRequest/NurseAccept'; static get engineerDashboardCountUrl=> '$_baseUrl/ServiceRequest/GetDashboardEngineerCount'; static get engineerDashboardDetailsUrl=> '$_baseUrl/ServiceRequest/GetDashboardEngineerDetails'; static get engineerDashboardNotAssignDetails=> '$_baseUrl/ServiceRequest/GetDashboardEngineerNotAssignDetails'; diff --git a/lib/service_request_latest/service_request_detail_provider.dart b/lib/service_request_latest/service_request_detail_provider.dart index 42188a57..9136bb4e 100644 --- a/lib/service_request_latest/service_request_detail_provider.dart +++ b/lib/service_request_latest/service_request_detail_provider.dart @@ -26,6 +26,14 @@ class ServiceRequestDetailProvider extends ChangeNotifier { DateTime timerStartTime = DateTime(0, 0, 0, 0, 0, 0); // Start from 00:00:00 Timer? timer; bool isTimerRunning = false; + bool _isNurseVerifiedEngineerArrival = false; + + bool get isNurseVerifiedEngineerArrival => _isNurseVerifiedEngineerArrival; + + set isNurseVerifiedEngineerArrival(bool value) { + _isNurseVerifiedEngineerArrival = value; + notifyListeners(); + } void startTimer() { if (isTimerRunning) return; @@ -201,7 +209,7 @@ class ServiceRequestDetailProvider extends ChangeNotifier { isLoading = false; notifyListeners(); } catch (e) { - log("getSubWorkOrderDetails [error] : $e"); + log("getWorkOrder [error] : $e"); isLoading = false; notifyListeners(); return null; @@ -527,14 +535,36 @@ class ServiceRequestDetailProvider extends ChangeNotifier { } //Nurse confirm arrival - Future nurseConfirmArrival({required int workOrderId}) async { + Future nurseConfirmEngineerArrival({required int workOrderId}) async { + try { + Map body = { + "workOrderId": workOrderId + }; + isLoading = true; + notifyListeners(); + final response = await ApiManager.instance.post(URLs.nurseConfirmEngineerArrivalUrl, body: body); + stateCode = response.statusCode; + if (response.statusCode >= 200 && response.statusCode < 300) { + currentWorkOrder = WorkOrderDetail.fromJson(json.decode(response.body)); + } + isLoading = false; + notifyListeners(); + return stateCode; + } catch (e) { + log("nurse reject [error] : $e"); + isLoading = false; + notifyListeners(); + return -1; + } + }//Nurse confirm arrival + Future nurseRejectEngineerArrival({required int workOrderId}) async { try { Map body = { "workOrderId": workOrderId }; isLoading = true; notifyListeners(); - final response = await ApiManager.instance.post(URLs.nurseAcceptUrl, body: body); + final response = await ApiManager.instance.post(URLs.nurseRejectEngineerArrivedUrl, body: body); stateCode = response.statusCode; if (response.statusCode >= 200 && response.statusCode < 300) { currentWorkOrder = WorkOrderDetail.fromJson(json.decode(response.body)); diff --git a/lib/service_request_latest/utilities/service_request_utils.dart b/lib/service_request_latest/utilities/service_request_utils.dart index 17dca6ea..ba5d154e 100644 --- a/lib/service_request_latest/utilities/service_request_utils.dart +++ b/lib/service_request_latest/utilities/service_request_utils.dart @@ -1,10 +1,13 @@ import 'dart:convert'; - +import 'dart:io'; +import 'dart:async'; import 'package:device_calendar/device_calendar.dart'; +import 'package:firebase_messaging/firebase_messaging.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:flutter_timezone/flutter_timezone.dart'; import 'package:fluttertoast/fluttertoast.dart'; +import 'package:google_api_availability/google_api_availability.dart'; import 'package:provider/provider.dart'; import 'package:test_sa/controllers/notification/notification_manger.dart'; import 'package:test_sa/extensions/context_extension.dart'; @@ -12,7 +15,7 @@ import 'package:test_sa/extensions/text_extensions.dart'; import 'package:test_sa/extensions/widget_extensions.dart'; import 'package:test_sa/new_views/common_widgets/app_lazy_loading.dart'; import 'package:test_sa/service_request_latest/service_request_detail_provider.dart'; - +import 'package:huawei_push/huawei_push.dart' as h_push; class ServiceRequestUtils { static double calculateAndAssignWorkingHours({ required DateTime? startTime, @@ -126,4 +129,109 @@ class ServiceRequestUtils { }, ); } + // Map messageData = message.data; + // if (messageData["notificationType"] != null && messageData["accept"] != null) { + // if (messageData["notificationType"] == "arrivalConfirmation") { + // if ((messageData["accept"].toString()) == "False") { + // if(messageData["accept"]) + // Navigator.pop(context, true); + // } else { + // Navigator.pop(context, false); + // } + // } + // } + + + static Future listenForApproval() async { + print('listen for approval called..'); + bool isVerified = false; + Completer completer = Completer(); + + if (Platform.isAndroid && !(await isGoogleServicesAvailable())) { + // If not using Firebase (i.e., if Google Services is unavailable) + h_push.Push.onMessageReceivedStream.listen((h_push.RemoteMessage remoteMessage) { + ConfirmArrivalNotificationModel notificationModel = ConfirmArrivalNotificationModel.fromJson(remoteMessage.toMap()); + if (notificationModel.requestId != null && notificationModel.accept != null) { + if (notificationModel.accept == 'True') { + isVerified = true; + completer.complete(isVerified); + } else if (notificationModel.accept == 'False') { + isVerified = false; + completer.complete(isVerified); + } + } + }, onError: (Object error) { + print("onMessageReceivedStream:${error.toString()}"); + completer.complete(false); // Handle any error + }); + } else { + // Using Firebase + FirebaseMessaging.onMessage.listen((RemoteMessage message) { + print('message data received: ${message.data}'); + ConfirmArrivalNotificationModel notificationModel = ConfirmArrivalNotificationModel.fromJson(message.data); + if (notificationModel.requestId != null && notificationModel.accept != null) { + if (notificationModel.accept == 'True') { + isVerified = true; + if (!completer.isCompleted) { + completer.complete(isVerified); + } + } else if (notificationModel.accept == 'False') { + isVerified = false; + if (!completer.isCompleted) { + completer.complete(isVerified); + } + } + } + }); + } + + // Wait for the future to complete with the notification response + return completer.future; + } + + static Future isGoogleServicesAvailable() async { + GooglePlayServicesAvailability availability = await GoogleApiAvailability.instance.checkGooglePlayServicesAvailability(); + String status = availability.toString().split('.').last; + if (status == "success") { + return true; + } + return false; + } +} +class ConfirmArrivalNotificationModel { + final String? transactionType; + final String? requestId; + final String? notificationType; + final String? userId; + final String? accept; + + ConfirmArrivalNotificationModel({ + this.transactionType, + this.requestId, + this.notificationType, + this.userId, + this.accept, + }); + + // Factory constructor to create an instance from a Map (e.g., JSON) + factory ConfirmArrivalNotificationModel.fromJson(Map json) { + return ConfirmArrivalNotificationModel( + transactionType: json['transactionType'], + requestId: json['requestId'], + notificationType: json['notificationType'], + userId: json['userId'], + accept: json['accept'], + ); + } + + // Convert an instance to a Map (e.g., for serialization) + Map toJson() { + return { + 'transactionType': transactionType, + 'requestId': requestId, + 'notificationType': notificationType, + 'userId': userId, + 'accept': accept, + }; + } } \ No newline at end of file diff --git a/lib/service_request_latest/views/components/action_button/footer_action_button.dart b/lib/service_request_latest/views/components/action_button/footer_action_button.dart index 6f7236f7..e99854e9 100644 --- a/lib/service_request_latest/views/components/action_button/footer_action_button.dart +++ b/lib/service_request_latest/views/components/action_button/footer_action_button.dart @@ -215,18 +215,15 @@ class FooterActionButton { )); } if (workOrderNextStepStatus == WorkOrderNextStepEnum.waitingForRequesterToConfirm) { - return SizedBox(); - // return footerContainer( - // child: AppFilledButton( - // label: context.translation.confirm, - // // maxWidth: true, - // buttonColor: AppColor.green70, - // onPressed: () async { - // ServiceRequestBottomSheet.nurseVerifyArrivalBottomSheet(context: context); - // // int? status = await requestDetailProvider.nurseConfirmArrival(workOrderId: requestDetailProvider.currentWorkOrder?.data?.requestId ?? 0); - // // if (status == 200) {} - // }, - // )); + return footerContainer( + child: AppFilledButton( + label: context.translation.takeAction, + // maxWidth: true, + buttonColor: AppColor.primary10, + onPressed: () async { + ServiceRequestBottomSheet.nurseVerifyArrivalBottomSheet(context: context); + }, + )); } } return const SizedBox(); diff --git a/lib/service_request_latest/views/components/bottom_sheets/service_request_bottomsheet.dart b/lib/service_request_latest/views/components/bottom_sheets/service_request_bottomsheet.dart index 71e8ba44..22e87f85 100644 --- a/lib/service_request_latest/views/components/bottom_sheets/service_request_bottomsheet.dart +++ b/lib/service_request_latest/views/components/bottom_sheets/service_request_bottomsheet.dart @@ -31,11 +31,12 @@ import '../../../../new_views/common_widgets/app_filled_button.dart'; import '../../../../new_views/common_widgets/app_text_form_field.dart'; class ServiceRequestBottomSheet { - static buildBottomSheetParent({required BuildContext context, required Widget childWidget}) { + static buildBottomSheetParent({required BuildContext context, required Widget childWidget,bool ?isDismissible}) { return showModalBottomSheet( context: context, useSafeArea: true, isScrollControlled: true, + isDismissible:isDismissible??true, backgroundColor: Colors.transparent, builder: (context) => SingleChildScrollView( child: childWidget, @@ -1044,120 +1045,9 @@ class ServiceRequestBottomSheet { ], ); })); - - // - // return showModalBottomSheet( - // context: context, - // useSafeArea: true, - // isScrollControlled: true, - // backgroundColor: Colors.transparent, - // builder: (context) => Consumer(builder: (context, serviceRequestProvider, child) { - // return Form( - // key: _formKey, - // child: SingleChildScrollView( - // child: StatefulBuilder(builder: (context, setState) { - // return Column( - // crossAxisAlignment: CrossAxisAlignment.center, - // children: [ - // const SizedBox().indicatorWidget(), - // 8.height, - // Align( - // alignment: AlignmentDirectional.centerStart, - // child: context.translation.pleaseConfirmTheIssueHasBeenResolved.bottomSheetHeadingTextStyle(context), - // ), - // 10.height, - // Row( - // children: [ - // InkWell( - // child: acknowledge - // ? const Icon( - // Icons.check_box, - // color: AppColor.primary10, - // ) - // : const Icon( - // Icons.check_box_outline_blank, - // color: AppColor.neutral120, - // ), - // onTap: () { - // setState(() { - // acknowledge = !acknowledge; - // }); - // }, - // ), - // 6.width, - // Flexible(child: context.translation.nurseAcknowledge.bodyText(context).custom(color: context.isDark ? AppColor.primary50 : AppColor.neutral120)), - // ], - // ), - // 17.height, - // ESignature( - // title: '', - // oldSignature: '', - // newSignature: newSignature, - // backgroundColor: AppColor.neutral100, - // showShadow: false, - // onSaved: (signature) { - // if (signature == null || signature.isEmpty) return; - // newSignature = signature; - // nurseSignature = "${DateTime.now().toIso8601String()}.png|${base64Encode(signature)}"; - // }, - // ), - // 36.height, - // Row( - // mainAxisAlignment: MainAxisAlignment.spaceBetween, - // mainAxisSize: MainAxisSize.min, - // children: [ - // AppFilledButton( - // label: context.translation.reject, - // maxWidth: true, - // buttonColor: Colors.white54, - // textColor: AppColor.red30, - // showBorder: true, - // onPressed: () async { - // _formKey.currentState?.save(); - // if (newSignature != null && acknowledge) { - // //TODO replace provider with new provider and also check workorder id is not correct. - // Provider.of(context, listen: false).nurseReject( - // model: NurseActionModel( - // workOrderId: int.parse(serviceRequestProvider.currentSelectedRequest!.id!), - // signatureNurse: nurseSignature, - // )); - // Navigator.pop(context); - // } - // }, - // ).expanded, - // const SizedBox( - // width: 20, - // ), - // AppFilledButton( - // label: context.translation.confirm, - // maxWidth: true, - // buttonColor: AppColor.green70, - // onPressed: () async { - // _formKey.currentState?.save(); - // if (newSignature != null && acknowledge) { - // //TODO replace provider with new provider and also check workorder id is not correct. - // Provider.of(context, listen: false).nurseConfirm( - // model: NurseActionModel( - // workOrderId: int.parse(serviceRequestProvider.currentSelectedRequest!.id!), - // signatureNurse: nurseSignature, - // )); - // Navigator.pop(context); - // } - // }, - // ).expanded, - // ], - // ) - // ], - // ); - // }), - // ), - // ).bottomSheetContainer(context); - // })); + } static Future nurseVerifyArrivalBottomSheet({required BuildContext context}) { - bool acknowledge = false; - Uint8List? newSignature; - String? nurseSignature; return buildBottomSheetParent( context: context, childWidget: Consumer(builder: (context, ServiceRequestDetailProvider requestDetailProvider, child) { @@ -1187,8 +1077,11 @@ class ServiceRequestBottomSheet { textColor: AppColor.red30, showBorder: true, onPressed: () async { - //TODO call the api .. Navigator.pop(context); + int? status = await requestDetailProvider.nurseRejectEngineerArrival(workOrderId: requestDetailProvider.currentWorkOrder?.data?.requestId ?? 0); + if (status == 200) { + requestDetailProvider.getWorkOrderById(id: requestDetailProvider.currentWorkOrder!.data!.requestId!); + } }, ).expanded, const SizedBox( @@ -1200,8 +1093,11 @@ class ServiceRequestBottomSheet { loading: requestDetailProvider.isLoading, buttonColor: AppColor.green70, onPressed: () async { - // int? status = await requestDetailProvider.nurseConfirmArrival(workOrderId: requestDetailProvider.currentWorkOrder?.data?.requestId ?? 0); - // if (status == 200) {} + Navigator.pop(context); + int? status = await requestDetailProvider.nurseConfirmEngineerArrival(workOrderId: requestDetailProvider.currentWorkOrder?.data?.requestId ?? 0); + if (status == 200) { + requestDetailProvider.getWorkOrderById(id: requestDetailProvider.currentWorkOrder!.data!.requestId!); + } }, ).expanded, ], @@ -1210,113 +1106,33 @@ class ServiceRequestBottomSheet { ); })); - // - // return showModalBottomSheet( - // context: context, - // useSafeArea: true, - // isScrollControlled: true, - // backgroundColor: Colors.transparent, - // builder: (context) => Consumer(builder: (context, serviceRequestProvider, child) { - // return Form( - // key: _formKey, - // child: SingleChildScrollView( - // child: StatefulBuilder(builder: (context, setState) { - // return Column( - // crossAxisAlignment: CrossAxisAlignment.center, - // children: [ - // const SizedBox().indicatorWidget(), - // 8.height, - // Align( - // alignment: AlignmentDirectional.centerStart, - // child: context.translation.pleaseConfirmTheIssueHasBeenResolved.bottomSheetHeadingTextStyle(context), - // ), - // 10.height, - // Row( - // children: [ - // InkWell( - // child: acknowledge - // ? const Icon( - // Icons.check_box, - // color: AppColor.primary10, - // ) - // : const Icon( - // Icons.check_box_outline_blank, - // color: AppColor.neutral120, - // ), - // onTap: () { - // setState(() { - // acknowledge = !acknowledge; - // }); - // }, - // ), - // 6.width, - // Flexible(child: context.translation.nurseAcknowledge.bodyText(context).custom(color: context.isDark ? AppColor.primary50 : AppColor.neutral120)), - // ], - // ), - // 17.height, - // ESignature( - // title: '', - // oldSignature: '', - // newSignature: newSignature, - // backgroundColor: AppColor.neutral100, - // showShadow: false, - // onSaved: (signature) { - // if (signature == null || signature.isEmpty) return; - // newSignature = signature; - // nurseSignature = "${DateTime.now().toIso8601String()}.png|${base64Encode(signature)}"; - // }, - // ), - // 36.height, - // Row( - // mainAxisAlignment: MainAxisAlignment.spaceBetween, - // mainAxisSize: MainAxisSize.min, - // children: [ - // AppFilledButton( - // label: context.translation.reject, - // maxWidth: true, - // buttonColor: Colors.white54, - // textColor: AppColor.red30, - // showBorder: true, - // onPressed: () async { - // _formKey.currentState?.save(); - // if (newSignature != null && acknowledge) { - // //TODO replace provider with new provider and also check workorder id is not correct. - // Provider.of(context, listen: false).nurseReject( - // model: NurseActionModel( - // workOrderId: int.parse(serviceRequestProvider.currentSelectedRequest!.id!), - // signatureNurse: nurseSignature, - // )); - // Navigator.pop(context); - // } - // }, - // ).expanded, - // const SizedBox( - // width: 20, - // ), - // AppFilledButton( - // label: context.translation.confirm, - // maxWidth: true, - // buttonColor: AppColor.green70, - // onPressed: () async { - // _formKey.currentState?.save(); - // if (newSignature != null && acknowledge) { - // //TODO replace provider with new provider and also check workorder id is not correct. - // Provider.of(context, listen: false).nurseConfirm( - // model: NurseActionModel( - // workOrderId: int.parse(serviceRequestProvider.currentSelectedRequest!.id!), - // signatureNurse: nurseSignature, - // )); - // Navigator.pop(context); - // } - // }, - // ).expanded, - // ], - // ) - // ], - // ); - // }), - // ), - // ).bottomSheetContainer(context); - // })); } + static Future waitingForApprovalBottomSheet({required BuildContext context}) { + return buildBottomSheetParent( + context: context, + childWidget: Consumer(builder: (context, ServiceRequestDetailProvider requestDetailProvider, child) { + return Column( + mainAxisSize: MainAxisSize.min, + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + "Waiting...".heading4(context), + 12.height, + Text( + "Request Sent, Waiting for requester to confirm arrival", + style: TextStyle( + fontSize: 16.toScreenWidth, + fontWeight: FontWeight.w500, + fontStyle: FontStyle.normal, + decoration: TextDecoration.none, + ), + ), + 12.height, + "waiting".toLottieAsset(height: 100).center, + 12.height, + ], + ); + })); + + } + } diff --git a/lib/service_request_latest/views/components/verify_arrival_view.dart b/lib/service_request_latest/views/components/verify_arrival_view.dart index a79b22d7..fe312ef0 100644 --- a/lib/service_request_latest/views/components/verify_arrival_view.dart +++ b/lib/service_request_latest/views/components/verify_arrival_view.dart @@ -13,6 +13,8 @@ import 'package:test_sa/new_views/app_style/app_color.dart'; import 'package:test_sa/new_views/common_widgets/app_lazy_loading.dart'; import 'package:test_sa/new_views/common_widgets/default_app_bar.dart'; import 'package:test_sa/service_request_latest/service_request_detail_provider.dart'; +import 'package:test_sa/service_request_latest/utilities/service_request_utils.dart'; +import 'package:test_sa/service_request_latest/views/components/bottom_sheets/service_request_bottomsheet.dart'; import 'package:test_sa/service_request_latest/views/components/verify_otp_view.dart'; import 'package:test_sa/views/widgets/bottom_sheets/request_approval_waiting_bottom_sheet.dart'; import 'package:test_sa/views/widgets/loaders/no_data_found.dart'; @@ -141,7 +143,7 @@ class _VerifyArrivalViewState extends State { break; case 2: try { - showWaitingBottomSheet(requestDetailProvider: requestDetailProvider, verificationTypeId: verificationTypeId,parentContext: context); + showWaitingBottomSheet(requestDetailProvider: requestDetailProvider, verificationTypeId: verificationTypeId); } catch (e) { "Requester not confirmed you arrival".showToast; } @@ -215,30 +217,38 @@ class _VerifyArrivalViewState extends State { return fileImage; } - void showWaitingBottomSheet({required ServiceRequestDetailProvider requestDetailProvider, int? verificationTypeId,required BuildContext parentContext}) async { + void showWaitingBottomSheet({required ServiceRequestDetailProvider requestDetailProvider, int? verificationTypeId}) async { await requestDetailProvider.engineerConfirmArrival( workOrderId: requestDetailProvider.currentWorkOrder!.data!.requestId!, verificationTypeId: verificationTypeId ?? 2, photoInfo: '', otp: ''); requestDetailProvider.isVerifyArrivalBottomSheetOpen = true; - bool? isArrived = (await showModalBottomSheet( - context: context, - useSafeArea: true, - isScrollControlled: true, - backgroundColor: Colors.transparent, - builder: (context) => RequestApprovalBottomSheet(), - )); + ServiceRequestBottomSheet.waitingForApprovalBottomSheet(context: context).then((value){ + requestDetailProvider.isVerifyArrivalBottomSheetOpen=false; + }); + bool ?isArrived = await ServiceRequestUtils.listenForApproval(); + // bool? isArrived = (await showModalBottomSheet( + // context: context, + // useSafeArea: true, + // isScrollControlled: true, + // isDismissible: false, + // backgroundColor: Colors.transparent, + // builder: (context) => RequestApprovalBottomSheet(), + // )); + print('value of arrived i got is ${isArrived}'); + // return ; if (requestDetailProvider.isVerifyArrivalBottomSheetOpen) { - print('is arrival value is ${isArrived}'); if (isArrived == null) { "Requester not confirmed you arrival".showToast; + Navigator.pop(context); } else if (isArrived) { requestDetailProvider.getWorkOrderById(id: requestDetailProvider.currentWorkOrder!.data!.requestId!); - Navigator.pop(parentContext); + Navigator.pop(context); + Navigator.pop(context); requestDetailProvider.startTimer(); } else { requestDetailProvider.getWorkOrderById(id: requestDetailProvider.currentWorkOrder!.data!.requestId!); "Requester not confirmed you arrival".showToast; - Navigator.pop(parentContext); - + Navigator.pop(context); + Navigator.pop(context); } } else{ diff --git a/lib/service_request_latest/views/service_request_detail_main_view.dart b/lib/service_request_latest/views/service_request_detail_main_view.dart index f11cfaf9..5b1f8854 100644 --- a/lib/service_request_latest/views/service_request_detail_main_view.dart +++ b/lib/service_request_latest/views/service_request_detail_main_view.dart @@ -33,17 +33,23 @@ class _ServiceRequestDetailMainState extends State { @override void initState() { super.initState(); + WidgetsBinding.instance.addPostFrameCallback((_) { - bool isNurse = (Provider.of(context, listen: false).user?.type) == UsersTypes.normal_user; - _requestProvider = Provider.of(context, listen: false); - //workOrderNextStepStatus == WorkOrderNextStepEnum.waitingForRequesterToConfirm - if (isNurse && (_requestProvider.currentWorkOrder?.data?.nextStep?.workOrderNextStepEnum == WorkOrderNextStepEnum.waitingForRequesterToConfirm) && !_requestProvider.isLoading) { - ServiceRequestBottomSheet.nurseVerifyArrivalBottomSheet(context: context); - } - _requestProvider.getWorkOrderById(id: widget.requestId); + getInitialData(); }); } + Future getInitialData() async{ + bool isNurse = (Provider.of(context, listen: false).user?.type) == UsersTypes.normal_user; + _requestProvider = Provider.of(context, listen: false); + await _requestProvider.getWorkOrderById(id: widget.requestId); + print('nextstep i got is ${_requestProvider.currentWorkOrder?.data?.nextStep?.workOrderNextStepEnum}'); + print('loading value is ${_requestProvider.isLoading}'); + if (isNurse && (_requestProvider.currentWorkOrder?.data?.nextStep?.workOrderNextStepEnum == WorkOrderNextStepEnum.waitingForRequesterToConfirm)) { + ServiceRequestBottomSheet.nurseVerifyArrivalBottomSheet(context: context); + } + } + @override void dispose() { super.dispose(); diff --git a/lib/views/widgets/bottom_sheets/request_approval_waiting_bottom_sheet.dart b/lib/views/widgets/bottom_sheets/request_approval_waiting_bottom_sheet.dart index 4a768e74..85d1d1c2 100644 --- a/lib/views/widgets/bottom_sheets/request_approval_waiting_bottom_sheet.dart +++ b/lib/views/widgets/bottom_sheets/request_approval_waiting_bottom_sheet.dart @@ -8,10 +8,12 @@ import 'package:provider/provider.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/main.dart'; import 'package:test_sa/new_views/app_style/app_color.dart'; import 'package:test_sa/service_request_latest/service_request_detail_provider.dart'; class RequestApprovalBottomSheet extends StatefulWidget { + RequestApprovalBottomSheet({Key? key}) : super(key: key); @override @@ -24,30 +26,31 @@ class _RequestApprovalBottomState extends State { @override void initState() { super.initState(); - listenForApproval(); + // listenForApproval(); } void listenForApproval() async { print('listen for approval called..'); if (Platform.isAndroid && !(await isGoogleServicesAvailable())) { - h_push.Push.onMessageReceivedStream.listen((h_push.RemoteMessage remoteMessage) { - // ConfirmArrivalNotificationModel notificationModel = ConfirmArrivalNotificationModel.fromJson(remoteMessage); - // if(notificationModel.requestId!=null&¬ificationModel.accept!=null){ - // if(notificationModel.accept=='True'){ - // Navigator.pop(context, true); - // }else if(notificationModel.accept=='False'){ - // Navigator.pop(context, false); - // } - // } - }, onError: (Object error) { - print("onMessageReceivedStream:${error.toString()}"); - }); + // h_push.Push.onMessageReceivedStream.listen((h_push.RemoteMessage remoteMessage) { + // ConfirmArrivalNotificationModel notificationModel = ConfirmArrivalNotificationModel.fromJson(remoteMessage.ex); + // if(notificationModel.requestId!=null&¬ificationModel.accept!=null){ + // if(notificationModel.accept=='True'){ + // Navigator.pop(context, true); + // }else if(notificationModel.accept=='False'){ + // Navigator.pop(context, false); + // } + // } + // }, onError: (Object error) { + // print("onMessageReceivedStream:${error.toString()}"); + // }); } else { FirebaseMessaging.onMessage.listen((RemoteMessage message) { + print('message data i got is ${message.toMap()}'); ConfirmArrivalNotificationModel notificationModel = ConfirmArrivalNotificationModel.fromJson(message.data); if(notificationModel.requestId!=null&¬ificationModel.accept!=null){ if(notificationModel.accept=='True'){ - Navigator.pop(context, true); + Navigator.pop(context,true); }else if(notificationModel.accept=='False'){ Navigator.pop(context, false); } @@ -79,7 +82,8 @@ class _RequestApprovalBottomState extends State { @override void dispose() { print('bottomsheet disposed..'); - + // ServiceRequestDetailProvider serviceRequestDetailProvider =Provider.of(context,listen: false); + // serviceRequestDetailProvider.isVerifyArrivalBottomSheetOpen=false; super.dispose(); }