Untitled
unknown
dart
a year ago
8.1 kB
5
Indexable
import 'dart:io'; import 'package:firebase_messaging/firebase_messaging.dart'; import 'package:flutter_local_notifications/flutter_local_notifications.dart'; import 'package:get/get.dart'; import 'package:lms_user_app/config.dart'; import 'package:lms_user_app/controller/auth_controller.dart'; import 'package:lms_user_app/core/helper/help_me.dart'; import 'package:path_provider/path_provider.dart'; import 'package:http/http.dart' as http; class NotificationHelper { static Future<void> initialize( FlutterLocalNotificationsPlugin flutterLocalNotificationsPlugin) async { var androidInitialize = const AndroidInitializationSettings('notification_icon'); var iOSInitialize = const IOSInitializationSettings(); var initializationsSettings = InitializationSettings(android: androidInitialize, iOS: iOSInitialize); flutterLocalNotificationsPlugin.initialize(initializationsSettings, onSelectNotification: (String? payload) async { printLog("payload:$payload"); try { if (payload != null && payload.isNotEmpty) { // Get.toNamed(RouteHelper.getBookingDetailsScreen(payload,'fromNotification')); } else { //Get.toNamed(RouteHelper.getNotificationRoute()); } } catch (e) { // } return; }); FirebaseMessaging.onMessage.listen((RemoteMessage message) { printLog( "onMessage: ${message.notification!.title}/${message.notification!.body}/${message.notification!.titleLocKey}"); // NotificationHelper.showNotification(message, flutterLocalNotificationsPlugin, false); if (Get.find<AuthController>().isLoggedIn()) { // Get.find<NotificationController>().getNotification(1); } }); FirebaseMessaging.onMessageOpenedApp.listen((RemoteMessage message) { try { if (message.notification!.titleLocKey != null && message.notification!.titleLocKey!.isNotEmpty) { // Get.toNamed(RouteHelper.getBookingDetailsScreen(message.notification!.titleLocKey!,'fromNotification')); } else { //Get.toNamed(RouteHelper.getNotificationRoute()); } } catch (e) { // } }); } static Future<void> showNotification(RemoteMessage message, FlutterLocalNotificationsPlugin fln, bool data) async { if (!GetPlatform.isIOS) { String? title; String? body; String? orderID; String? image; if (data) { title = message.data['title']; body = message.data['body']; orderID = message.data['booking_id'].toString(); image = (message.data['image'] != null && message.data['image'].isNotEmpty) ? message.data['image'].startsWith('http') ? message.data['image'] : '${Config.baseUrl}/storage/app/public/notification/${message.data['image']}' : null; } else { title = message.notification!.title; body = message.notification!.body; orderID = message.notification!.titleLocKey; if (GetPlatform.isAndroid) { image = (message.notification!.android!.imageUrl != null && message.notification!.android!.imageUrl!.isNotEmpty) ? message.notification!.android!.imageUrl!.startsWith('http') ? message.notification!.android!.imageUrl : '${Config.baseUrl}/storage/app/public/notification/${message.notification!.android!.imageUrl}' : null; } else if (GetPlatform.isIOS) { image = (message.notification!.apple!.imageUrl != null && message.notification!.apple!.imageUrl!.isNotEmpty) ? message.notification!.apple!.imageUrl!.startsWith('http') ? message.notification!.apple!.imageUrl : '${Config.baseUrl}/storage/app/public/notification/${message.notification!.apple!.imageUrl}' : null; } } if (image != null && image.isNotEmpty) { try { await showBigPictureNotificationHiddenLargeIcon( title!, body!, orderID!, image, fln); } catch (e) { // await showBigTextNotification(_title!, _body!, _orderID!, fln); await showBigTextNotification(title!, ' ', orderID!, fln); } } else { await showBigTextNotification(title!, ' ', orderID!, fln); } } } static Future<void> showTextNotification(String title, String body, String orderID, FlutterLocalNotificationsPlugin fln) async { const AndroidNotificationDetails androidPlatformChannelSpecifics = AndroidNotificationDetails( 'onlms', 'onlms', playSound: true, importance: Importance.max, priority: Priority.max, sound: RawResourceAndroidNotificationSound('notification'), ); const NotificationDetails platformChannelSpecifics = NotificationDetails(android: androidPlatformChannelSpecifics); await fln.show(0, title, body, platformChannelSpecifics, payload: orderID); } static Future<void> showBigTextNotification(String title, String body, String orderID, FlutterLocalNotificationsPlugin fln) async { BigTextStyleInformation bigTextStyleInformation = BigTextStyleInformation( body, htmlFormatBigText: true, contentTitle: title, htmlFormatContentTitle: true, ); AndroidNotificationDetails androidPlatformChannelSpecifics = AndroidNotificationDetails( 'onlms', 'onlms', importance: Importance.max, styleInformation: bigTextStyleInformation, priority: Priority.max, playSound: true, sound: const RawResourceAndroidNotificationSound('notification'), ); NotificationDetails platformChannelSpecifics = NotificationDetails(android: androidPlatformChannelSpecifics); await fln.show(0, title, body, platformChannelSpecifics, payload: orderID); } static Future<void> showBigPictureNotificationHiddenLargeIcon( String title, String body, String orderID, String image, FlutterLocalNotificationsPlugin fln) async { final String largeIconPath = await _downloadAndSaveFile(image, 'largeIcon'); final String bigPicturePath = await _downloadAndSaveFile(image, 'bigPicture'); final BigPictureStyleInformation bigPictureStyleInformation = BigPictureStyleInformation( FilePathAndroidBitmap(bigPicturePath), hideExpandedLargeIcon: true, contentTitle: title, htmlFormatContentTitle: true, summaryText: body, htmlFormatSummaryText: true, ); final AndroidNotificationDetails androidPlatformChannelSpecifics = AndroidNotificationDetails( 'onlms', 'onlms', largeIcon: FilePathAndroidBitmap(largeIconPath), priority: Priority.max, playSound: true, styleInformation: bigPictureStyleInformation, importance: Importance.max, sound: const RawResourceAndroidNotificationSound('notification'), ); final NotificationDetails platformChannelSpecifics = NotificationDetails(android: androidPlatformChannelSpecifics); await fln.show(0, title, body, platformChannelSpecifics, payload: orderID); } static Future<String> _downloadAndSaveFile( String url, String fileName) async { final Directory directory = await getApplicationDocumentsDirectory(); final String filePath = '${directory.path}/$fileName'; final http.Response response = await http.get(Uri.parse(url)); final File file = File(filePath); await file.writeAsBytes(response.bodyBytes); return filePath; } } Future<dynamic> myBackgroundMessageHandler(RemoteMessage message) async { printLog( "onBackground: ${message.notification!.title}/${message.notification!.body}/${message.notification!.titleLocKey}"); }
Editor is loading...
Leave a Comment