46 lines
1.7 KiB
Dart
46 lines
1.7 KiB
Dart
import 'package:firebase_messaging/firebase_messaging.dart';
|
|
import 'package:flutter/material.dart';
|
|
|
|
import '../widget/debug/debug_tile.dart';
|
|
import '../widget/debug/json_viewer.dart';
|
|
import 'notification_tasks.dart';
|
|
|
|
class NotificationController {
|
|
// Notification display is handled by the Firebase SDK using server-generated payloads.
|
|
@pragma('vm:entry-point')
|
|
static Future<void> onBackgroundMessageHandler(RemoteMessage message) async {
|
|
NotificationTasks.updateBadgeCount(message);
|
|
}
|
|
|
|
static Future<void> onForegroundMessageHandler(RemoteMessage message, BuildContext context) async {
|
|
NotificationTasks.updateProviders(context);
|
|
NotificationTasks.updateBadgeCount(message);
|
|
}
|
|
|
|
static Future<void> onAppOpenedByNotification(RemoteMessage message, BuildContext context) async {
|
|
NotificationTasks.navigateToTalk(context, chatToken: _extractChatToken(message));
|
|
NotificationTasks.updateProviders(context);
|
|
|
|
DebugTile(context).run(() {
|
|
showDialog(context: context, builder: (context) => AlertDialog(
|
|
title: const Text('Notification report'),
|
|
content: Column(
|
|
mainAxisSize: MainAxisSize.min,
|
|
children: [
|
|
const Text('Dieser Bericht wird angezeigt, da du den Entwicklermodus aktiviert hast und die App über eine Benachrichtigung geöffnet wurde.'),
|
|
Text(JsonViewer.format(message.data)),
|
|
],
|
|
),
|
|
));
|
|
});
|
|
}
|
|
|
|
static String? _extractChatToken(RemoteMessage message) {
|
|
for (final key in const ['chatToken', 'token', 'roomToken']) {
|
|
final value = message.data[key];
|
|
if (value is String && value.isNotEmpty) return value;
|
|
}
|
|
return null;
|
|
}
|
|
}
|