Notifications (android via local) work
This commit is contained in:
70
flutter/lib/utils/notifier.dart
Normal file
70
flutter/lib/utils/notifier.dart
Normal file
@@ -0,0 +1,70 @@
|
||||
import 'dart:io';
|
||||
|
||||
import 'package:flutter_local_notifications/flutter_local_notifications.dart';
|
||||
import 'package:simplecloudnotifier/settings/app_settings.dart';
|
||||
import 'package:simplecloudnotifier/state/application_log.dart';
|
||||
import 'package:simplecloudnotifier/state/globals.dart';
|
||||
|
||||
class Notifier {
|
||||
static void showLocalNotification(String channelID, String channelName, String channelDescr, String title, String body, DateTime? timestamp) async {
|
||||
final nid = Globals().sharedPrefs.getInt('notifier.nextid') ?? 1000;
|
||||
Globals().sharedPrefs.setInt('notifier.nextid', nid + 7);
|
||||
|
||||
final existingSummaryNID = Globals().sharedPrefs.getInt('notifier.summary.$channelID');
|
||||
|
||||
final flutterLocalNotificationsPlugin = FlutterLocalNotificationsPlugin();
|
||||
|
||||
if (Platform.isAndroid && AppSettings().groupNotifications) {
|
||||
final activeNotifications = (await flutterLocalNotificationsPlugin.getActiveNotifications()).where((p) => p.groupKey == channelID).toList();
|
||||
final summaryNotification = activeNotifications.where((p) => p.id == existingSummaryNID).toList();
|
||||
|
||||
ApplicationLog.debug('found ${activeNotifications.length} active notifications in this group (${summaryNotification.length} summary notifications for channel ${channelID} with nid [${existingSummaryNID}])');
|
||||
|
||||
if (activeNotifications.isNotEmpty && !activeNotifications.any((p) => p.id == existingSummaryNID)) {
|
||||
// ======== SHOW SUMMARY/GROUPING NOTIFICATION ========
|
||||
final newSummaryNID = nid + 1;
|
||||
ApplicationLog.debug('Create new summary notifications for channel ${channelID} with nid [${newSummaryNID}])');
|
||||
Globals().sharedPrefs.setInt('notifier.summary.$channelID', newSummaryNID);
|
||||
await flutterLocalNotificationsPlugin.show(
|
||||
newSummaryNID,
|
||||
channelName,
|
||||
"(multiple notifications)",
|
||||
NotificationDetails(
|
||||
android: AndroidNotificationDetails(
|
||||
channelID,
|
||||
channelName,
|
||||
importance: Importance.max,
|
||||
priority: Priority.high,
|
||||
groupKey: channelID,
|
||||
setAsGroupSummary: true,
|
||||
subText: (channelName == 'main') ? null : channelName,
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
final newMessageNID = nid + 2;
|
||||
|
||||
ApplicationLog.debug('Create new local notifications for message in channel ${channelID} with nid [${newMessageNID}])');
|
||||
|
||||
// ======== SHOW NOTIFICATION ========
|
||||
await flutterLocalNotificationsPlugin.show(
|
||||
newMessageNID,
|
||||
title,
|
||||
body,
|
||||
NotificationDetails(
|
||||
android: AndroidNotificationDetails(
|
||||
channelID,
|
||||
channelName,
|
||||
channelDescription: channelDescr,
|
||||
importance: Importance.max,
|
||||
priority: Priority.high,
|
||||
when: timestamp?.millisecondsSinceEpoch,
|
||||
groupKey: channelID,
|
||||
subText: (channelName == 'main') ? null : channelName,
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user