Receive notifications even when the app is in the foreground! With FlutterFlow, you can implement a Custom Action that converts background notifications into local notifications displayed directly in the app when it is open. This ensures your users never miss an important message, whether the app is in the foreground or background. Provide a more connected experience in your application! Video on youtube portuguease_BR https://youtu.be/ynuW8_o-vzE?si=-XAijgRC7DGp4O4y Video on youtube in English soon.
Here´s the code
inApp Notification.pdf
39.27KB
// Automatic FlutterFlow imports
import '/backend/backend.dart';
import '/flutter_flow/flutter_flow_theme.dart';
import '/flutter_flow/flutter_flow_util.dart';
import '/custom_code/actions/index.dart'; // Imports other custom actions
import '/flutter_flow/custom_functions.dart'; // Imports custom functions
import 'package:flutter/material.dart';
// Begin custom action code
// DO NOT REMOVE OR MODIFY THE CODE ABOVE!
import 'package:flutter_local_notifications/flutter_local_notifications.dart';
import 'package:firebase_messaging/firebase_messaging.dart';
final FlutterLocalNotificationsPlugin flutterLocalNotificationsPlugin =
FlutterLocalNotificationsPlugin();
bool isNotificationInitialized = false;
Future<void> setupFirebaseMessaging2(BuildContext context) async {
if (!isNotificationInitialized) {
await _initializeNotifications(); // Inicializa as notificações
isNotificationInitialized = true;
}
// Solicitar permissões para notificações (iOS e Android)
await FirebaseMessaging.instance.requestPermission(
alert: true,
badge: true,
sound: true,
);
// Escutando mensagens em primeiro plano
FirebaseMessaging.onMessage.listen((RemoteMessage message) {
final title = message.notification?.title ?? 'Título padrão';
final body = message.notification?.body ?? 'Mensagem padrão';
print('Mensagem recebida no primeiro plano: $title - $body');
// Exibir notificação enquanto o app está ativo
showForegroundNotification(title, body);
});
// Configurar mensagens em segundo plano
FirebaseMessaging.onBackgroundMessage(_firebaseBackgroundMessageHandler);
}
Future<void> _initializeNotifications() async {
// Configurações de inicialização para Android
const AndroidInitializationSettings initializationSettingsAndroid =
AndroidInitializationSettings('@mipmap/ic_launcher');
const InitializationSettings initializationSettings =
InitializationSettings(android: initializationSettingsAndroid);
// Inicializar o plugin
await flutterLocalNotificationsPlugin.initialize(initializationSettings);
// Criar canal de notificações para Android com som habilitado
const AndroidNotificationChannel channel = AndroidNotificationChannel(
'high_importance_channel', // ID único do canal
'Notificações Importantes', // Nome do canal visível ao usuário
description: 'Este canal é usado para notificações importantes.',
importance: Importance.max,
playSound: true, // Som habilitado
);
// Registrar o canal no Android
final androidImplementation =
flutterLocalNotificationsPlugin.resolvePlatformSpecificImplementation<
AndroidFlutterLocalNotificationsPlugin>();
await androidImplementation?.createNotificationChannel(channel);
}
Future<void> _firebaseBackgroundMessageHandler(RemoteMessage message) async {
final title = message.notification?.title ?? 'Título padrão';
final body = message.notification?.body ?? 'Mensagem padrão';
print('Mensagem recebida no segundo plano: $title - $body');
await showForegroundNotification(title, body);
}
Future<void> showForegroundNotification(String title, String body) async {
try {
// Geração de ID único para notificações
final notificationId =
DateTime.now().millisecondsSinceEpoch.remainder(1000);
// Configurações da notificação para Android
const AndroidNotificationDetails androidPlatformChannelSpecifics =
AndroidNotificationDetails(
'high_importance_channel', // ID do canal deve ser o mesmo criado
'Notificações Importantes', // Nome do canal
channelDescription: 'Este canal é usado para notificações importantes.',
importance: Importance.max,
priority: Priority.high,
playSound: true, // Habilita som
);
const NotificationDetails platformChannelSpecifics =
NotificationDetails(android: androidPlatformChannelSpecifics);
// Exibe a notificação
await flutterLocalNotificationsPlugin.show(
notificationId, // ID único
title,
body,
platformChannelSpecifics,
);
print("Notificação exibida com sucesso: $notificationId");
} catch (e) {
print('Erro ao exibir a notificação: $e');
}
}