🚀 ¡Notificaciones locales en Flutter!.
Tabla de Contenido
Información sobre flutter_local_notifications
Este paquete como su nombre lo indica, nos permite enviar notificaciones locales en Flutter. Son notificaciones de diferentes características:
- Informativas de solo texto.
- Con acciones, que permitan abrir una parte de la app.
- Programables, que se envíen cada cierto tiempo.
- Entre otras opciones.
Es importante siempre leer la documentación oficial ya que allí nombra algunas limitaciones que podemos tener con este paquete, configuraciones, ejemplos y muchas cosas más.
Instalación
Para realizar la instalación del paquete es bastante sencillo y tenemos algunas alternativas:
- Con Flutter:
flutter pub add flutter_local_notifications
- Con Dart:
dart pub add flutter_local_notifications
- Agregar manualmente en el
pubspec.yaml:
dependencies:
flutter_local_notifications: ^19.0.0
Al final con las 2 primeras opciones, terminan agregando el código como se hace en la 3ra opción. Luego de eso, debemos ejecutar el comando flutter pub get para descargar y actualizar el paquete. Algunos IDEs como vscode, pueden realizar esta ejecución del comando de forma automática, si está configurado.
Si se realiza por alguna de las 2 primeras opciones el resultado sería similar a este:
~/development/apps/flutter_notifications_app (master) $ dart pub add flutter_local_notifications
Configuraciones
Primero que todo, debemos arrancar por las configuraciones necesarias para que funcione en nuestro dispositivo, sea Android o iOS. También es posible utilizarlo para Flutter web (macOS y Linux), pero nos vamos a enfocar solo en móvil.
Versiones utilizadas
- Flutter: 3.29.2
- Dart: 3.7.2
Android
En la documentación nos indican que pueden haber diferencias en la configuración, dependiendo de la versión que estemos utilizando, por lo cual recomiendan que utilicemos la última versión. Tener en cuenta que para este caso vamos a estar utilizando la última hasta la fecha que es la 19.0.0.
Configuración de Gradle plugin (AGP)
- El paquete utiliza Android Gradle Plugin (AGP) en su versión
7.3.1, por lo cual debemos tener como mínimo esa versión. En la versión3.29.2de Flutter, para configurar AGP, debe modificarse en el archivogradle/wrapper/gradle-wrapper.propertiesque actualmente trae la versión8.10.2en la propiedaddistributionUrl. La cual debería ser suficiente para que funcione el paqueteflutter_local_notifications.
distributionUrl=https\://services.gradle.org/distributions/gradle-8.10.2-all.zip
- El paquete requiere que el
compileSdksea mínimo35, el cual podemos configurar en el archivoandroid/app/build.gradle.kts. Para realizar este cambio sería simplemente cambiar decompileSdk = flutter.compileSdkVersiona:
android {
compileSdk 35
}
-
Configuración del archivo
android/app/src/main/AndroidManifest.xml, para agregar los permisos necesarios según las notificaciones que vamos a utilizar, para más detalle ver aquí . En este caso, vamos a utilizar una notificación simple, solo con texto. No es necesario realizar cambios en este archivo. -
Ya que en el paquete se pueden realizar notificaciones programadas, se debe configurar desugaring para soportar versiones anteriores a la 10 de Android. Para lograr esta configuración, debemos realizar un par de cambios en el archivo
android/app/src/main/build.gradle.kts:- En la propiedad
android -> compileOptionsagregar la banderaisCoreLibraryDesugaringEnabled = true. - A nivel de
android, agregar una nueva propiedaddependenciescon siguiente contenido:
dependencies { coreLibraryDesugaring("com.android.tools:desugar_jdk_libs:2.1.4") }Al final debería quedar algo similar a esto:
- En la propiedad
android {
defaultConfig {
multiDexEnabled = true
}
compileOptions {
// Flag to enable support for the new language APIs
isCoreLibraryDesugaringEnabled = true
// Sets Java compatibility to Java 11
sourceCompatibility = JavaVersion.VERSION_11
targetCompatibility = JavaVersion.VERSION_11
}
kotlinOptions {
jvmTarget = JavaVersion.VERSION_11.toString()
}
}
dependencies {
coreLibraryDesugaring("com.android.tools:desugar_jdk_libs:2.1.4")
}
Con estas configuraciones, debería ser suficiente para poder utilizar las notificaciones simples del paquete en Android.
iOS
- Para las notificaciones en general, basta simplemente con realizar la siguiente configuración, agregando unas líneas de código dentro del método
applicationen el archivoAppDelegate.swift, el cual se encuentra dentro de la carpetaios/Runner.
if #available(iOS 10.0, *) {
UNUserNotificationCenter.current().delegate = self as? UNUserNotificationCenterDelegate
}
Inicialización y Uso
Para poder usar el paquete, primero debemos inicializarlo y esto lo conseguimos de la siguiente manera, en el método main antes de runApp, es lo recomendado:
- Para Android:
Aquí es importante tener en cuenta que el ícono app_icon debe estar agregado en la carpeta android/app/src/main/res/drawable para que funcione correctamente en Android.
import 'package:flutter/material.dart';
import 'package:flutter_local_notifications/flutter_local_notifications.dart';
void main() async {
WidgetsFlutterBinding.ensureInitialized();
FlutterLocalNotificationsPlugin flutterLocalNotificationsPlugin =
FlutterLocalNotificationsPlugin();
// initialise the plugin. app_icon needs to be a added as a drawable resource to the Android head project
const AndroidInitializationSettings initializationSettingsAndroid =
AndroidInitializationSettings('app_icon');
final InitializationSettings initializationSettings = InitializationSettings(
android: initializationSettingsAndroid);
await flutterLocalNotificationsPlugin.initialize(initializationSettings,
onDidReceiveNotificationResponse:(details) {
print('Response: $details');
},);
runApp(const MyApp());
}
- Para iOS:
import 'package:flutter/material.dart';
import 'package:flutter_local_notifications/flutter_local_notifications.dart';
void main() async {
WidgetsFlutterBinding.ensureInitialized();
FlutterLocalNotificationsPlugin flutterLocalNotificationsPlugin =
FlutterLocalNotificationsPlugin();
final DarwinInitializationSettings initializationSettingsDarwin =
DarwinInitializationSettings();
final InitializationSettings initializationSettings = InitializationSettings(
iOS: initializationSettingsDarwin);
await flutterLocalNotificationsPlugin.initialize(initializationSettings,
onDidReceiveNotificationResponse:(details) {
print('Response: $details');
},);
runApp(const MyApp());
}
- Para Android y iOS:
import 'package:flutter/material.dart';
import 'package:flutter_local_notifications/flutter_local_notifications.dart';
void main() async {
WidgetsFlutterBinding.ensureInitialized();
FlutterLocalNotificationsPlugin flutterLocalNotificationsPlugin =
FlutterLocalNotificationsPlugin();
// initialise the plugin. app_icon needs to be a added as a drawable resource to the Android head project
const AndroidInitializationSettings initializationSettingsAndroid =
AndroidInitializationSettings('app_icon');
final DarwinInitializationSettings initializationSettingsDarwin =
DarwinInitializationSettings();
final InitializationSettings initializationSettings = InitializationSettings(
android: initializationSettingsAndroid,
iOS: initializationSettingsDarwin);
await flutterLocalNotificationsPlugin.initialize(initializationSettings,
onDidReceiveNotificationResponse:(details) {
print('Response: $details');
},);
runApp(const MyApp());
}
Solicitar permisos para notificaciones
Es importante solicitar permisos al usuario para que active los permisos de notificaciones para la app Flutter.
Esto lo logramos de la siguiente manera:
final FlutterLocalNotificationsPlugin flutterLocalNotificationsPlugin =
FlutterLocalNotificationsPlugin();
await flutterLocalNotificationsPlugin
.resolvePlatformSpecificImplementation<
AndroidFlutterLocalNotificationsPlugin
>()
?.requestNotificationsPermission();
await flutterLocalNotificationsPlugin
.resolvePlatformSpecificImplementation<
IOSFlutterLocalNotificationsPlugin
>()
?.requestPermissions(alert: true, badge: true, sound: true);
Notificaciones simples
Las notificaciones más sencillas, son las que tienen solo texto, sirven para mostrar información de recordatorio al usuario.
const AndroidNotificationDetails androidDetails =
AndroidNotificationDetails(
'channel_id',
'Notificaciones simples',
channelDescription: 'Canal para notificaciones simples',
importance: Importance.max,
priority: Priority.high,
);
const DarwinNotificationDetails iosDetails = DarwinNotificationDetails(
presentAlert: true,
presentBadge: true,
presentSound: true,
);
const NotificationDetails platformDetails = NotificationDetails(
android: androidDetails,
iOS: iosDetails,
);
await flutterLocalNotificationsPlugin.show(
0,
'Este es el título!',
'Este es el contenido de la notificación simple.',
platformDetails,
payload: 'simple_notification',
);
Con esto sería suficiente para poder mostrar notificaciones simples tanto para Android como para iOS.
Ejemplo
| Android | iOS |
|---|---|
![]() |
![]() |
Ejemplo completo en GitHub
Conclusión
En conclusión, este es un paquete muy completo para usar notificaciones en Flutter, hay más que se puede utilizar como notificaciones con acciones para viajar a una vista específica de nuestra app y notificaciones programadas, por dar un par de ejemplos más. Así que pueden explorar mucho más al respecto del paquete en la documentación.
¡Gracias por leer!
https://buymeacoffee.com/jaimetellezb


