You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
111 lines
4.2 KiB
Dart
111 lines
4.2 KiB
Dart
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<void> firebaseMessagingBackgroundHandler(RemoteMessage message) async {}
|
|
|
|
class FirebaseNotificationManger {
|
|
static FirebaseMessaging messaging = FirebaseMessaging.instance;
|
|
static String? token;
|
|
|
|
static Future<String?> 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<String, dynamic> 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);
|
|
}
|
|
}
|