45 lines
1.7 KiB
Dart
45 lines
1.7 KiB
Dart
import 'dart:developer';
|
|
|
|
import 'package:firebase_core/firebase_core.dart';
|
|
import 'package:firebase_messaging/firebase_messaging.dart';
|
|
import 'package:flutter/cupertino.dart';
|
|
|
|
import '../api/marianumcloud/talk/room/getRoom.dart';
|
|
import '../api/marianumcloud/talk/room/getRoomParams.dart';
|
|
import '../model/accountData.dart';
|
|
import 'notificationService.dart';
|
|
|
|
class NotificationController {
|
|
@pragma('vm:entry-point')
|
|
static Future<void> onBackgroundMessageHandler(RemoteMessage message) async {
|
|
log("Handling a background notification: ${message.messageId}");
|
|
|
|
await Firebase.initializeApp();
|
|
AccountData().waitForPopulation().then((value) {
|
|
log("User account status: $value");
|
|
if(value) {
|
|
GetRoom(
|
|
GetRoomParams(
|
|
includeStatus: false,
|
|
),
|
|
).run().then((value) {
|
|
var messageCount = value.data.map((e) => e.unreadMessages).reduce((a, b) => a + b);
|
|
var chatCount = value.data.map((e) => e.unreadMessages).length;
|
|
var people = value.data.where((e) => e.unreadMessages > 0).map((e) => e.displayName.split(" ")[0]);
|
|
|
|
final NotificationService service = NotificationService();
|
|
service.initializeNotifications().then((value) {
|
|
service.showNotification(
|
|
title: "Du hast $messageCount ungelesene Nachrichten!",
|
|
body: "In $chatCount Chats, von ${people.join(", ")}"
|
|
);
|
|
});
|
|
});
|
|
}
|
|
});
|
|
}
|
|
|
|
static Future<void> onForegroundMessageHandler(RemoteMessage message, BuildContext context) async {
|
|
NotificationService().showToast(message: "Du hast eine neue Talk Nachricht!", context: context);
|
|
}
|
|
} |