Local Notifications
Introduction
Nylo Website provides a local notification system through the LocalNotification class. This allows you to send immediate or scheduled notifications with rich content on iOS and Android.
Local notifications are not supported on the web. Attempting to use them on web will throw a
NotificationException.
Basic Usage
Send a notification using the builder pattern or the static method:
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",
);
Scheduled Notifications
Schedule a notification to be delivered at a specific time:
// 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,
);
Builder Pattern
The LocalNotification class provides a fluent builder API. All chainable methods return the LocalNotification instance:
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();
Chainable Methods
| Method | Parameters | Description |
|---|---|---|
addPayload |
String payload |
Sets custom data string for the notification |
addId |
int id |
Sets a unique identifier for the notification |
addSubtitle |
String subtitle |
Sets the subtitle text |
addBadgeNumber |
int badgeNumber |
Sets the app icon badge number |
addSound |
String sound |
Sets a custom sound file name |
addAttachment |
String url, String fileName, {bool? showThumbnail} |
Adds an attachment (iOS only, downloads from URL) |
setAndroidConfig |
AndroidNotificationConfig config |
Sets Android-specific configuration |
setIOSConfig |
IOSNotificationConfig config |
Sets iOS-specific configuration |
send()
Future<void> send({
DateTime? at,
AndroidScheduleMode? androidScheduleMode,
})
If at is provided, schedules the notification for that time. Otherwise shows it immediately.
Platform Configuration
In v7, platform-specific options are configured through AndroidNotificationConfig and IOSNotificationConfig objects.
Android Configuration
Pass an AndroidNotificationConfig to 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();
AndroidNotificationConfig Properties
| Property | Type | Default | Description |
|---|---|---|---|
channelId |
String? |
'default_channel' |
Notification channel ID |
channelName |
String? |
'Default Channel' |
Notification channel name |
channelDescription |
String? |
'Default Channel' |
Channel description |
importance |
Importance? |
Importance.max |
Notification importance level |
priority |
Priority? |
Priority.high |
Notification priority |
ticker |
String? |
'ticker' |
Ticker text for accessibility |
icon |
String? |
'app_icon' |
Small icon resource name |
playSound |
bool? |
true |
Whether to play a sound |
enableVibration |
bool? |
true |
Whether to enable vibration |
vibrationPattern |
List<int>? |
- | Custom vibration pattern (ms) |
groupKey |
String? |
- | Group key for notification grouping |
setAsGroupSummary |
bool? |
false |
Whether this is the group summary |
groupAlertBehavior |
GroupAlertBehavior? |
GroupAlertBehavior.all |
Alert behavior for groups |
autoCancel |
bool? |
true |
Auto-dismiss on tap |
ongoing |
bool? |
false |
Cannot be dismissed by user |
silent |
bool? |
false |
Silent notification |
color |
Color? |
- | Accent color |
largeIcon |
String? |
- | Large icon resource path |
onlyAlertOnce |
bool? |
false |
Only alert on first show |
showWhen |
bool? |
true |
Show timestamp |
when |
int? |
- | Custom timestamp (ms since epoch) |
usesChronometer |
bool? |
false |
Use chronometer display |
chronometerCountDown |
bool? |
false |
Chronometer counts down |
channelShowBadge |
bool? |
true |
Show badge on channel |
showProgress |
bool? |
false |
Show progress indicator |
maxProgress |
int? |
0 |
Maximum progress value |
progress |
int? |
0 |
Current progress value |
indeterminate |
bool? |
false |
Indeterminate progress |
channelAction |
AndroidNotificationChannelAction? |
createIfNotExists |
Channel action |
enableLights |
bool? |
false |
Enable notification LED |
ledColor |
Color? |
- | LED color |
ledOnMs |
int? |
- | LED on duration (ms) |
ledOffMs |
int? |
- | LED off duration (ms) |
visibility |
NotificationVisibility? |
- | Lock screen visibility |
timeoutAfter |
int? |
- | Auto-dismiss timeout (ms) |
fullScreenIntent |
bool? |
false |
Launch as full screen intent |
shortcutId |
String? |
- | Shortcut ID |
additionalFlags |
List<int>? |
- | Additional flags |
tag |
String? |
- | Notification tag |
actions |
List<AndroidNotificationAction>? |
- | Action buttons |
colorized |
bool? |
false |
Enable colorization |
audioAttributesUsage |
AudioAttributesUsage? |
notification |
Audio attributes usage |
iOS Configuration
Pass an IOSNotificationConfig to 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();
IOSNotificationConfig Properties
| Property | Type | Default | Description |
|---|---|---|---|
presentList |
bool? |
true |
Present in notification list |
presentAlert |
bool? |
true |
Present an alert |
presentBadge |
bool? |
true |
Update app badge |
presentSound |
bool? |
true |
Play sound |
presentBanner |
bool? |
true |
Present banner |
sound |
String? |
- | Sound file name |
badgeNumber |
int? |
- | Badge number |
threadIdentifier |
String? |
- | Thread identifier for grouping |
categoryIdentifier |
String? |
- | Category identifier for actions |
interruptionLevel |
InterruptionLevel? |
- | Interruption level |
Attachments (iOS Only)
Add image, audio, or video attachments to iOS notifications. Attachments are downloaded from a URL:
await LocalNotification(
title: "New Photo",
body: "Check out this image!",
)
.addAttachment(
"https://example.com/image.jpg",
"photo.jpg",
showThumbnail: true,
)
.send();
Managing Notifications
Cancel a Specific Notification
await LocalNotification.cancelNotification(42);
// With a tag (Android)
await LocalNotification.cancelNotification(42, tag: "my_tag");
Cancel All Notifications
await LocalNotification.cancelAllNotifications();
Clear Badge Count
await LocalNotification.clearBadgeCount();
Permissions
Request notification permissions from the user:
// 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',
);
Permissions are automatically requested on the first notification send via NyScheduler.taskOnce.
Platform Setup
iOS Setup
Add to your Info.plist:
<key>UIBackgroundModes</key>
<array>
<string>remote-notification</string>
</array>
Android Setup
Add to your 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" />
API Reference
Static Methods
| Method | Signature | Description |
|---|---|---|
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}) |
Send a notification with all options |
cancelNotification |
static Future<void> cancelNotification(int id, {String? tag}) |
Cancel a specific notification |
cancelAllNotifications |
static Future<void> cancelAllNotifications() |
Cancel all notifications |
requestPermissions |
static Future<void> requestPermissions({...}) |
Request notification permissions |
clearBadgeCount |
static Future<void> clearBadgeCount() |
Clear the iOS badge count |
Instance Methods (Chainable)
| Method | Parameters | Returns | Description |
|---|---|---|---|
addPayload |
String payload |
LocalNotification |
Set payload data |
addId |
int id |
LocalNotification |
Set notification ID |
addSubtitle |
String subtitle |
LocalNotification |
Set subtitle |
addBadgeNumber |
int badgeNumber |
LocalNotification |
Set badge number |
addSound |
String sound |
LocalNotification |
Set custom sound |
addAttachment |
String url, String fileName, {bool? showThumbnail} |
LocalNotification |
Add attachment (iOS) |
setAndroidConfig |
AndroidNotificationConfig config |
LocalNotification |
Set Android config |
setIOSConfig |
IOSNotificationConfig config |
LocalNotification |
Set iOS config |
send |
{DateTime? at, AndroidScheduleMode? androidScheduleMode} |
Future<void> |
Send the notification |