Notifiche Locali
Introduzione
Nylo Website fornisce un sistema di notifiche locali attraverso la classe LocalNotification. Questo ti permette di inviare notifiche immediate o programmate con contenuti ricchi su iOS e Android.
Le notifiche locali non sono supportate sul web. Il tentativo di usarle sul web generera' un
NotificationException.
Utilizzo Base
Invia una notifica usando il pattern builder o il metodo statico:
import 'package:nylo_framework/nylo_framework.dart';
// Builder pattern
await LocalNotification(title: "Hello", body: "World").send();
// Using the helper function
await localNotification("Hello", "World").send();
// Using the static method
await LocalNotification.sendNotification(
title: "Hello",
body: "World",
);
Notifiche Programmate
Programma una notifica da consegnare a un orario specifico:
// Schedule for tomorrow
final tomorrow = DateTime.now().add(Duration(days: 1));
await LocalNotification(
title: "Reminder",
body: "Don't forget your appointment!",
).send(at: tomorrow);
// Using the static method
await LocalNotification.sendNotification(
title: "Reminder",
body: "Don't forget your appointment!",
at: tomorrow,
);
Pattern Builder
La classe LocalNotification fornisce un'API builder fluente. Tutti i metodi concatenabili restituiscono l'istanza LocalNotification:
await LocalNotification(title: "New Photo", body: "Check this out!")
.addPayload("photo_id:123")
.addId(42)
.addSubtitle("From your friend")
.addBadgeNumber(3)
.addSound("custom_sound.wav")
.send();
Metodi Concatenabili
| Metodo | Parametri | Descrizione |
|---|---|---|
addPayload |
String payload |
Imposta una stringa dati personalizzata per la notifica |
addId |
int id |
Imposta un identificatore unico per la notifica |
addSubtitle |
String subtitle |
Imposta il testo del sottotitolo |
addBadgeNumber |
int badgeNumber |
Imposta il numero del badge dell'icona dell'app |
addSound |
String sound |
Imposta un file audio personalizzato |
addAttachment |
String url, String fileName, {bool? showThumbnail} |
Aggiunge un allegato (solo iOS, scarica da URL) |
setAndroidConfig |
AndroidNotificationConfig config |
Imposta la configurazione specifica per Android |
setIOSConfig |
IOSNotificationConfig config |
Imposta la configurazione specifica per iOS |
send()
Future<void> send({
DateTime? at,
AndroidScheduleMode? androidScheduleMode,
})
Se at e' fornito, programma la notifica per quell'orario. Altrimenti la mostra immediatamente.
Configurazione della Piattaforma
Le opzioni specifiche della piattaforma sono configurate tramite gli oggetti AndroidNotificationConfig e IOSNotificationConfig.
Configurazione Android
Passa un AndroidNotificationConfig a setAndroidConfig():
await LocalNotification(
title: "Android Notification",
body: "With custom configuration",
)
.setAndroidConfig(AndroidNotificationConfig(
channelId: "custom_channel",
channelName: "Custom Channel",
channelDescription: "Notifications from custom channel",
importance: Importance.max,
priority: Priority.high,
enableVibration: true,
vibrationPattern: [0, 1000, 500, 1000],
enableLights: true,
ledColor: Color(0xFF00FF00),
))
.send();
Proprieta' di AndroidNotificationConfig
| Proprieta' | Tipo | Predefinito | Descrizione |
|---|---|---|---|
channelId |
String? |
'default_channel' |
ID del canale di notifica |
channelName |
String? |
'Default Channel' |
Nome del canale di notifica |
channelDescription |
String? |
'Default Channel' |
Descrizione del canale |
importance |
Importance? |
Importance.max |
Livello di importanza della notifica |
priority |
Priority? |
Priority.high |
Priorita' della notifica |
ticker |
String? |
'ticker' |
Testo ticker per l'accessibilita' |
icon |
String? |
'app_icon' |
Nome risorsa icona piccola |
playSound |
bool? |
true |
Se riprodurre un suono |
enableVibration |
bool? |
true |
Se abilitare la vibrazione |
vibrationPattern |
List<int>? |
- | Pattern di vibrazione personalizzato (ms) |
groupKey |
String? |
- | Chiave di gruppo per il raggruppamento delle notifiche |
setAsGroupSummary |
bool? |
false |
Se questa e' il riepilogo del gruppo |
groupAlertBehavior |
GroupAlertBehavior? |
GroupAlertBehavior.all |
Comportamento degli avvisi per i gruppi |
autoCancel |
bool? |
true |
Eliminazione automatica al tocco |
ongoing |
bool? |
false |
Non puo' essere eliminata dall'utente |
silent |
bool? |
false |
Notifica silenziosa |
color |
Color? |
- | Colore accento |
largeIcon |
String? |
- | Percorso risorsa icona grande |
onlyAlertOnce |
bool? |
false |
Avvisa solo alla prima visualizzazione |
showWhen |
bool? |
true |
Mostra timestamp |
when |
int? |
- | Timestamp personalizzato (ms dall'epoca) |
usesChronometer |
bool? |
false |
Usa visualizzazione cronometro |
chronometerCountDown |
bool? |
false |
Il cronometro conta alla rovescia |
channelShowBadge |
bool? |
true |
Mostra badge sul canale |
showProgress |
bool? |
false |
Mostra indicatore di progresso |
maxProgress |
int? |
0 |
Valore massimo del progresso |
progress |
int? |
0 |
Valore corrente del progresso |
indeterminate |
bool? |
false |
Progresso indeterminato |
channelAction |
AndroidNotificationChannelAction? |
createIfNotExists |
Azione del canale |
enableLights |
bool? |
false |
Abilita LED di notifica |
ledColor |
Color? |
- | Colore LED |
ledOnMs |
int? |
- | Durata LED acceso (ms) |
ledOffMs |
int? |
- | Durata LED spento (ms) |
visibility |
NotificationVisibility? |
- | Visibilita' sulla schermata di blocco |
timeoutAfter |
int? |
- | Timeout di eliminazione automatica (ms) |
fullScreenIntent |
bool? |
false |
Avvia come intent a schermo intero |
shortcutId |
String? |
- | ID scorciatoia |
additionalFlags |
List<int>? |
- | Flag aggiuntivi |
tag |
String? |
- | Tag della notifica |
actions |
List<AndroidNotificationAction>? |
- | Pulsanti di azione |
colorized |
bool? |
false |
Abilita colorazione |
audioAttributesUsage |
AudioAttributesUsage? |
notification |
Utilizzo attributi audio |
Configurazione iOS
Passa un IOSNotificationConfig a setIOSConfig():
await LocalNotification(
title: "iOS Notification",
body: "With custom configuration",
)
.setIOSConfig(IOSNotificationConfig(
presentAlert: true,
presentBanner: true,
presentSound: true,
threadIdentifier: "thread_1",
interruptionLevel: InterruptionLevel.active,
))
.addBadgeNumber(1)
.addSound("custom_sound.wav")
.send();
Proprieta' di IOSNotificationConfig
| Proprieta' | Tipo | Predefinito | Descrizione |
|---|---|---|---|
presentList |
bool? |
true |
Mostra nell'elenco delle notifiche |
presentAlert |
bool? |
true |
Mostra un avviso |
presentBadge |
bool? |
true |
Aggiorna il badge dell'app |
presentSound |
bool? |
true |
Riproduci suono |
presentBanner |
bool? |
true |
Mostra banner |
sound |
String? |
- | Nome file audio |
badgeNumber |
int? |
- | Numero del badge |
threadIdentifier |
String? |
- | Identificatore del thread per il raggruppamento |
categoryIdentifier |
String? |
- | Identificatore della categoria per le azioni |
interruptionLevel |
InterruptionLevel? |
- | Livello di interruzione |
Allegati (Solo iOS)
Aggiungi allegati immagine, audio o video alle notifiche iOS. Gli allegati vengono scaricati da un URL:
await LocalNotification(
title: "New Photo",
body: "Check out this image!",
)
.addAttachment(
"https://example.com/image.jpg",
"photo.jpg",
showThumbnail: true,
)
.send();
Gestione delle Notifiche
Annullare una Notifica Specifica
await LocalNotification.cancelNotification(42);
// With a tag (Android)
await LocalNotification.cancelNotification(42, tag: "my_tag");
Annullare Tutte le Notifiche
await LocalNotification.cancelAllNotifications();
Cancellare il Conteggio dei Badge
await LocalNotification.clearBadgeCount();
Permessi
Richiedi i permessi per le notifiche all'utente:
// Request with defaults
await LocalNotification.requestPermissions();
// Request with specific options
await LocalNotification.requestPermissions(
alert: true,
badge: true,
sound: true,
provisional: false,
critical: false,
vibrate: true,
enableLights: true,
channelId: 'default_notification_channel_id',
channelName: 'Default Notification Channel',
);
I permessi vengono richiesti automaticamente al primo invio di notifica tramite NyScheduler.taskOnce.
Configurazione della Piattaforma
Configurazione iOS
Aggiungi al tuo Info.plist:
<key>UIBackgroundModes</key>
<array>
<string>remote-notification</string>
</array>
Configurazione Android
Aggiungi al tuo AndroidManifest.xml:
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
<uses-permission android:name="android.permission.VIBRATE" />
<uses-permission android:name="android.permission.USE_FULL_SCREEN_INTENT" />
Riferimento API
Metodi Statici
| Metodo | Firma | Descrizione |
|---|---|---|
sendNotification |
static Future<void> sendNotification({required String title, required String body, String? payload, DateTime? at, int? id, String? subtitle, int? badgeNumber, String? sound, AndroidNotificationConfig? androidConfig, IOSNotificationConfig? iosConfig, AndroidScheduleMode? androidScheduleMode}) |
Invia una notifica con tutte le opzioni |
cancelNotification |
static Future<void> cancelNotification(int id, {String? tag}) |
Annulla una notifica specifica |
cancelAllNotifications |
static Future<void> cancelAllNotifications() |
Annulla tutte le notifiche |
requestPermissions |
static Future<void> requestPermissions({...}) |
Richiedi i permessi per le notifiche |
clearBadgeCount |
static Future<void> clearBadgeCount() |
Cancella il conteggio dei badge iOS |
Metodi di Istanza (Concatenabili)
| Metodo | Parametri | Ritorna | Descrizione |
|---|---|---|---|
addPayload |
String payload |
LocalNotification |
Imposta i dati del payload |
addId |
int id |
LocalNotification |
Imposta l'ID della notifica |
addSubtitle |
String subtitle |
LocalNotification |
Imposta il sottotitolo |
addBadgeNumber |
int badgeNumber |
LocalNotification |
Imposta il numero del badge |
addSound |
String sound |
LocalNotification |
Imposta il suono personalizzato |
addAttachment |
String url, String fileName, {bool? showThumbnail} |
LocalNotification |
Aggiungi allegato (iOS) |
setAndroidConfig |
AndroidNotificationConfig config |
LocalNotification |
Imposta la configurazione Android |
setIOSConfig |
IOSNotificationConfig config |
LocalNotification |
Imposta la configurazione iOS |
send |
{DateTime? at, AndroidScheduleMode? androidScheduleMode} |
Future<void> |
Invia la notifica |