notifications implemented

design_3.0_latest
WaseemAbbasi22 1 year ago
parent d3ed7e39c2
commit 501c78dc09

@ -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';

@ -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<int?> nurseConfirmArrival({required int workOrderId}) async {
Future<int?> nurseConfirmEngineerArrival({required int workOrderId}) async {
try {
Map<String,dynamic> 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<int?> nurseRejectEngineerArrival({required int workOrderId}) async {
try {
Map<String,dynamic> 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));

@ -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<String, dynamic> 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<bool?> listenForApproval() async {
print('listen for approval called..');
bool isVerified = false;
Completer<bool> completer = Completer<bool>();
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<bool> 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<String, dynamic> 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<String, dynamic> toJson() {
return {
'transactionType': transactionType,
'requestId': requestId,
'notificationType': notificationType,
'userId': userId,
'accept': accept,
};
}
}

@ -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();

@ -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<ServiceRequestsProvider>(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<RequestDetailProvider>(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<RequestDetailProvider>(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<ServiceRequestDetailProvider>(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<ServiceRequestsProvider>(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<RequestDetailProvider>(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<RequestDetailProvider>(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<ServiceRequestDetailProvider>(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,
],
);
}));
}
}

@ -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<VerifyArrivalView> {
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<VerifyArrivalView> {
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{

@ -33,17 +33,23 @@ class _ServiceRequestDetailMainState extends State<ServiceRequestDetailMain> {
@override
void initState() {
super.initState();
WidgetsBinding.instance.addPostFrameCallback((_) {
bool isNurse = (Provider.of<UserProvider>(context, listen: false).user?.type) == UsersTypes.normal_user;
_requestProvider = Provider.of<ServiceRequestDetailProvider>(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<void> getInitialData() async{
bool isNurse = (Provider.of<UserProvider>(context, listen: false).user?.type) == UsersTypes.normal_user;
_requestProvider = Provider.of<ServiceRequestDetailProvider>(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();

@ -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<RequestApprovalBottomSheet> {
@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&&notificationModel.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&&notificationModel.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&&notificationModel.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<RequestApprovalBottomSheet> {
@override
void dispose() {
print('bottomsheet disposed..');
// ServiceRequestDetailProvider serviceRequestDetailProvider =Provider.of<ServiceRequestDetailProvider>(context,listen: false);
// serviceRequestDetailProvider.isVerifyArrivalBottomSheetOpen=false;
super.dispose();
}

Loading…
Cancel
Save