An extended NotificationsAPI for Dart Web notifications.
Examples of notifications on different platforms.
Example of a simple notification:
JsNotificationsPlatform.instance.showNotification("Test Notification", tag: "test");
Example of a notification with actions:
JsNotificationsPlatform.instance.showNotification(
"Oh no!",
body: "Subverted expectations result in expected unexpected expectations. Anyway, check the icon...",
tag: "inquisition",
icon: "https://pbs.twimg.com/media/CtCG_f4WcAAJY-1.jpg",
actions: [
JSNotificationAction(action: "dismiss", title: "Whatever"),
JSNotificationAction(action: "unexpected", title: "Didn't expect that"),
],
requireInteraction: true,
);
Note: when hovering over the notification to display actions, the image is not displayed.
The Dart Web package is limited in showing notifications, one can only show a title, body, and icon. This package extends the NotificationsAPI to allow for more customization.
Add the following to your pubspec.yaml
file:
dependencies:
js_notifications: ^0.0.1
Copy the service worker file named js_notifications-sw.js
from the example
directory to your web directory. The name is very important, so make sure to have the file named js_notifications-sw.js
.
import 'package:js_notifications/js_notifications.dart';
final _jsNotificationsPlugin = JsNotificationsPlatform.instance;
_jsNotificationsPlugin.requestPermission().then((permission) {
print(permission);
});
_jsNotificationsPlugin.showNotification('Title', {
body: 'Body',
icon: 'icon.png',
badge: 'badge.png',
image: 'image.png',
tag: 'tag',
data: {
'key': 'value'
},
}
);
Here, we use the actions
parameter to add actions to the notification. These are filled with JSNotificationAction
objects.
JsNotificationsPlatform.instance.showNotification(
"Click me",
body: "An interactive notification",
tag: "interactive",
actions: [
JSNotificationAction(action: "dismiss", title: "Click me"),
JSNotificationAction(action: "click-me", title: "No, click me!"),
],
requireInteraction: true,
);
There are convenience methods to create actions, fromAction
, fromTitle
and simpleWithIcon
.
- macOS: Limited to 2 actions (text only) with
Settings
automatically added as a 3rd option. - Windows: Limited to 3 actions, fully customizable.
- Linux: Usually limited to 3 actions, customizability based on distro & desktop environment.
For this, we use the requireInteraction: true
option
JsNotificationsPlatform.instance.showNotification(
"Attention",
body: "I just wanted your attention",
tag: "attention",
actions: [
JSNotificationAction(action: "dismiss", title: "Go away"),
],
requireInteraction: true,
);
_jsNotificationsPlugin.actionStream.listen((event) {
print(event);
switch (event.action) {
case "unexpected": {
_sendBasicNotification("I know, neither did they.");
break;
}
//... other actions
}
});
_jsNotificationsPlugin.dismissStream.listen((event) {
print(event);
});