refactor: Projektstruktur in app/ und backend/ aufgeteilt

This commit is contained in:
2026-03-24 15:06:44 +01:00
parent 5f5d5995c5
commit 2673ef658d
449 changed files with 28551 additions and 167 deletions

View File

@@ -0,0 +1,123 @@
import 'package:flutter_local_notifications/flutter_local_notifications.dart';
import 'package:votianlt_app/services/developer.dart' as developer;
class NotificationService {
NotificationService._internal();
static final NotificationService _instance = NotificationService._internal();
factory NotificationService() => _instance;
final FlutterLocalNotificationsPlugin _plugin =
FlutterLocalNotificationsPlugin();
bool _initialized = false;
/// The conversation key of the chat currently being viewed by the user.
/// When set, incoming chat notifications for this conversation are suppressed.
String? activeConversationKey;
static const String _chatChannelId = 'chat_messages';
static const String _chatChannelName = 'Chat-Nachrichten';
static const String _chatChannelDescription =
'Benachrichtigungen bei neuen Chat-Nachrichten';
static const String _jobChannelId = 'new_jobs';
static const String _jobChannelName = 'Neue Jobs';
static const String _jobChannelDescription =
'Benachrichtigungen bei neuen Job-Zuweisungen';
int _nextId = 0;
Future<void> initialize() async {
if (_initialized) return;
const androidSettings = AndroidInitializationSettings(
'@mipmap/ic_launcher',
);
const iosSettings = DarwinInitializationSettings(
requestAlertPermission: true,
requestBadgePermission: true,
requestSoundPermission: true,
);
const initSettings = InitializationSettings(
android: androidSettings,
iOS: iosSettings,
);
await _plugin.initialize(initSettings);
await _plugin
.resolvePlatformSpecificImplementation<
AndroidFlutterLocalNotificationsPlugin>()
?.requestNotificationsPermission();
_initialized = true;
developer.log('NotificationService initialized',
name: 'NotificationService');
}
Future<void> showChatNotification({
required String title,
required String body,
required String conversationKey,
}) async {
if (!_initialized) return;
if (activeConversationKey == conversationKey) return;
const androidDetails = AndroidNotificationDetails(
_chatChannelId,
_chatChannelName,
channelDescription: _chatChannelDescription,
importance: Importance.high,
priority: Priority.high,
playSound: true,
enableVibration: true,
);
const iosDetails = DarwinNotificationDetails(
presentAlert: true,
presentBadge: true,
presentSound: true,
);
const details = NotificationDetails(
android: androidDetails,
iOS: iosDetails,
);
await _plugin.show(_nextId++, title, body, details,
payload: 'chat:$conversationKey');
}
Future<void> showJobNotification({
required String title,
required String body,
}) async {
if (!_initialized) return;
const androidDetails = AndroidNotificationDetails(
_jobChannelId,
_jobChannelName,
channelDescription: _jobChannelDescription,
importance: Importance.high,
priority: Priority.high,
playSound: true,
enableVibration: true,
);
const iosDetails = DarwinNotificationDetails(
presentAlert: true,
presentBadge: true,
presentSound: true,
);
const details = NotificationDetails(
android: androidDetails,
iOS: iosDetails,
);
await _plugin.show(_nextId++, title, body, details, payload: 'job');
}
}