import 'dart:io'; import 'package:firebase_messaging/firebase_messaging.dart'; import 'package:flutter/material.dart'; import 'package:flutter_local_notifications/flutter_local_notifications.dart'; import 'package:http/http.dart'; import 'package:path_provider/path_provider.dart'; import '../../../constants/assets.dart'; import '../../../models/notification_message.dart'; import '../../../views/widgets/notification/notification_dynamic_dialog.dart'; class LocalNotificationService { // Instance of Flutternotification plugin static final FlutterLocalNotificationsPlugin _notificationsPlugin = FlutterLocalNotificationsPlugin(); static void initialize() { // Initialization setting for android const InitializationSettings initializationSettingsAndroid = InitializationSettings( android: AndroidInitializationSettings("@mipmap/ic_launcher")); _notificationsPlugin.initialize( initializationSettingsAndroid, // to handle event when we receive notification onDidReceiveNotificationResponse: (details) { if (details.input != null) {} }, ); } static Future display(RemoteMessage message) async { // To display the notification in device try { final id = DateTime.now().millisecondsSinceEpoch ~/ 1000; final BigPictureStyleInformation bigPictureStyleInformation = BigPictureStyleInformation( FilePathAndroidBitmap( "lib/assets/aaaa.jpg"), contentTitle: NotificationMessage.fromJson(message.data).title, htmlFormatContentTitle: true, summaryText: NotificationMessage.fromJson(message.data).body, htmlFormatSummaryText: true, htmlFormatContent: true, largeIcon: const FilePathAndroidBitmap( "lib/assets/aaaa.jpg")); NotificationDetails notificationDetails = NotificationDetails( android: AndroidNotificationDetails("Channel Id", "Main Channel", groupKey: "gfg", color: Colors.white, importance: Importance.max, playSound: true, priority: Priority.high), ); if (message.notification == null) { final NotificationMessage notificationModel = NotificationMessage.fromJson(message.data); await _notificationsPlugin.show(id, notificationModel.title, notificationModel.body, notificationDetails, payload: message.data['route']); } else { await _notificationsPlugin.show(id, message.notification?.title, message.notification?.body, notificationDetails, payload: message.data['route']); } } catch (e) { debugPrint(e.toString()); } } void messageListener(BuildContext context) { // Either you can pass buildcontext or you // can take a context from navigator key FirebaseMessaging.onMessage.listen((RemoteMessage message) { print('Got a message in the foreground!'); print('Message data: ${message.data}'); if (message.data != null) { print( 'Message also contained a notification: so it will pop up ${message.notification!.body}'); showDialog( context: context, // context: navigatorKey!.currentContext!, builder: ((BuildContext context) { return NotificationDynamicDialog( title: message.notification!.title, body: message.notification!.body); })); } }); } static Future _downloadAndSaveFile(String url, String fileName) async { final Directory directory = await getApplicationDocumentsDirectory(); final String filePath = '${directory.path}/$fileName'; final Response response = await get(Uri.parse(url)); final File file = File(filePath); await file.writeAsBytes(response.bodyBytes); return filePath; } static Future showBigPictureNotification() async { final String largeIconPath = await _downloadAndSaveFile( 'https://via.placeholder.com/48x48', 'largeIcon'); final String bigPicturePath = await _downloadAndSaveFile( 'https://via.placeholder.com/400x800', 'bigPicture'); final BigPictureStyleInformation bigPictureStyleInformation = BigPictureStyleInformation(FilePathAndroidBitmap(bigPicturePath), largeIcon: FilePathAndroidBitmap(largeIconPath), contentTitle: 'overridden big content title', htmlFormatContentTitle: true, summaryText: 'summary text', htmlFormatSummaryText: true); final AndroidNotificationDetails androidPlatformChannelSpecifics = AndroidNotificationDetails( 'big text channel id', 'big text channel name', channelDescription: 'big text channel description', largeIcon: FilePathAndroidBitmap(largeIconPath), channelShowBadge: false, styleInformation: bigPictureStyleInformation); final NotificationDetails platformChannelSpecifics = NotificationDetails(android: androidPlatformChannelSpecifics); await _notificationsPlugin.show( 0, 'big text title', 'silent body', platformChannelSpecifics); } }