import 'dart:convert'; import 'dart:io'; import 'package:firebase_messaging/firebase_messaging.dart'; import 'package:flutter/material.dart'; import 'package:test_sa/controllers/notification/notification_manger.dart'; import 'package:test_sa/models/all_requests_and_count_model.dart'; import 'package:test_sa/models/device/asset_transfer.dart'; import 'package:test_sa/models/new_models/gas_refill_model.dart'; import 'package:test_sa/models/service_request/service_request.dart'; import 'package:test_sa/views/pages/device_transfer/device_transfer_details.dart'; import 'package:test_sa/views/pages/user/gas_refill/gas_refill_details.dart'; import 'package:test_sa/views/pages/user/ppm/ppm_details_page.dart'; import 'package:test_sa/views/pages/user/requests/service_request_details.dart'; @pragma('vm:entry-point') Future firebaseMessagingBackgroundHandler(RemoteMessage message) async {} class FirebaseNotificationManger { static FirebaseMessaging messaging = FirebaseMessaging.instance; static String token; static Future getToken() async { NotificationSettings settings = await messaging.requestPermission( alert: true, announcement: false, badge: true, carPlay: false, criticalAlert: false, provisional: false, sound: true, ); if (settings.authorizationStatus == AuthorizationStatus.authorized) { try { token = await messaging.getToken(); } catch (ex) {} } print("pushToken:$token"); return token; } static void handleMessage(context, Map messageData) { if (messageData["requestType"] != null && messageData["requestNumber"] != null) { Widget serviceClass; if (messageData["requestType"] == "Service request to engineer") { serviceClass = ServiceRequestDetailsPage(serviceRequest: ServiceRequest(id: messageData["requestNumber"].toString())); } else if (messageData["requestType"] == "Gas Refill") { serviceClass = GasRefillDetailsPage( priority: messageData["priority"], date: messageData["createdOn"], model: GasRefillModel(id: int.parse(messageData["requestNumber"].toString())), ); } else if (messageData["requestType"] == "Asset Transfer") { serviceClass = DeviceTransferDetails(model: AssetTransfer(id: int.parse(messageData["requestNumber"].toString()))); } else if (messageData["requestType"] == "PPM") { serviceClass = PpmDetailsPage( request: RequestsDetails( id: int.parse(messageData["requestNumber"].toString()), priority: messageData["priority"], )); } // else if (data["requestType"] == "WorkOrder") { // // } if (serviceClass != null) { Navigator.of(context).push(MaterialPageRoute(builder: (_) => serviceClass)); } } } static initialized(BuildContext context) async { //await Firebase.initializeApp(); NotificationSettings settings; try { settings = await messaging.requestPermission( alert: true, announcement: false, badge: true, carPlay: false, criticalAlert: false, provisional: false, sound: true, ); } catch (error) { return; } if (settings.authorizationStatus != AuthorizationStatus.authorized) { return; } await FirebaseMessaging.instance.setAutoInitEnabled(true); await FirebaseMessaging.instance.setForegroundNotificationPresentationOptions(alert: true, badge: true, sound: true); FirebaseMessaging.instance.getInitialMessage().then((initialMessage) { if (initialMessage != null) { handleMessage(context, initialMessage.data); } }); FirebaseMessaging.onMessage.listen((RemoteMessage message) { if (Platform.isAndroid) { NotificationManger.showNotification( title: message.notification.title, subtext: message.notification.body, hashcode: int.tryParse("1234" ?? "") ?? 1, payload: json.encode(message.data), context: context); } return; }); FirebaseMessaging.onMessageOpenedApp.listen((RemoteMessage message) { handleMessage(context, message.data); }); FirebaseMessaging.onBackgroundMessage(firebaseMessagingBackgroundHandler); } }