import 'package:firebase_core/firebase_core.dart'; import 'package:firebase_messaging/firebase_messaging.dart'; import 'package:flutter/material.dart'; import 'package:flutter_local_notifications/flutter_local_notifications.dart'; import 'dart:convert'; import 'dart:io' show Platform; class PushNotificationService { final FirebaseMessaging _firebaseMessaging = FirebaseMessaging.instance; final FlutterLocalNotificationsPlugin _flutterLocalNotificationsPlugin = FlutterLocalNotificationsPlugin(); static const String _channelId = 'visitRequest'; static const String _channelName = 'Visitas'; static const String _channelDescription = 'Solicitação de visita'; Future initialize() async { var initializationSettingsAndroid = const AndroidInitializationSettings('ic_launcher'); var initializationSettingsIOS = const DarwinInitializationSettings( requestAlertPermission: true, requestBadgePermission: true, requestSoundPermission: true, ); var initializationSettings = InitializationSettings( android: initializationSettingsAndroid, iOS: initializationSettingsIOS, ); await _flutterLocalNotificationsPlugin.initialize(initializationSettings); if (Platform.isAndroid) { var channel = const AndroidNotificationChannel( _channelId, _channelName, description: _channelDescription, importance: Importance.high, ); await _flutterLocalNotificationsPlugin .resolvePlatformSpecificImplementation< AndroidFlutterLocalNotificationsPlugin>() ?.createNotificationChannel(channel); } await Firebase.initializeApp(); FirebaseMessaging.onBackgroundMessage(_firebaseMessagingBackgroundHandler); FirebaseMessaging.onMessage.listen(_handleMessage); FirebaseMessaging.onMessageOpenedApp.listen(_handleMessage); NotificationSettings settings = await _firebaseMessaging.requestPermission( alert: true, badge: true, sound: true, ); debugPrint('User granted permission: ${settings.authorizationStatus}'); } void _handleMessage(RemoteMessage message) { RemoteNotification? notification = message.notification; AndroidNotification? android = message.notification?.android; Map data = message.data; // Verifica se há um clickAction e se é um visit_request String? clickAction = data['clickAction']; if (clickAction != null && clickAction == "visit_request") { // Implementa a lógica específica para visit_request // Por exemplo, exibir uma notificação específica para visit_request if (notification != null && android != null) { var androidPlatformChannelSpecifics = const AndroidNotificationDetails( _channelId, _channelName, channelDescription: "Descrição específica para visit_request", importance: Importance.max, priority: Priority.high, ); var platformChannelSpecifics = NotificationDetails( android: androidPlatformChannelSpecifics, ); _flutterLocalNotificationsPlugin.show( notification.hashCode, "Título específico para visit_request", "Corpo específico para visit_request", platformChannelSpecifics, payload: "Dados adicionais que podem ser usados ao tocar na notificação", ); } } else if (notification != null && android != null) { // Trata outras notificações como normalmente var androidPlatformChannelSpecifics = const AndroidNotificationDetails( _channelId, _channelName, channelDescription: _channelDescription, importance: Importance.max, priority: Priority.high, ); var platformChannelSpecifics = NotificationDetails( android: androidPlatformChannelSpecifics, ); _flutterLocalNotificationsPlugin.show( notification.hashCode, notification.title, notification.body, platformChannelSpecifics, ); } } Future _firebaseMessagingBackgroundHandler( RemoteMessage message) async { await Firebase.initializeApp(); print("Handling a background message: ${message.messageId}"); } }