Files
lab-app/lib/core/services/notification_service.dart
Emre Emir 8bbc9dbff2 Initial commit: DLS - Dental Lab System
- Flutter + PocketBase dental lab management system
- Clinic & lab dashboards, job tracking, patient management
- Product catalog, finance tracking, multi-language support
- AI assistant integration, realtime notifications
- Windows installer (Inno Setup) included
- Developed by kovakyazilim.com
2026-06-11 15:57:31 +03:00

65 lines
2.2 KiB
Dart

import 'dart:io';
import 'package:flutter/foundation.dart';
import 'package:go_router/go_router.dart';
import 'package:onesignal_flutter/onesignal_flutter.dart';
// ─── Replace with your OneSignal App ID from onesignal.com ──────────────────
const _kOneSignalAppId = '524cb6d8-2640-4f85-bb24-c9c762233de7';
// ────────────────────────────────────────────────────────────────────────────
class NotificationService {
NotificationService._();
static GoRouter? _router;
static bool _initialized = false;
static void setRouter(GoRouter router) => _router = router;
static bool get _supported =>
!kIsWeb && (Platform.isIOS || Platform.isAndroid || Platform.isMacOS);
static Future<void> init() async {
if (!_supported || _initialized) return;
_initialized = true;
OneSignal.initialize(_kOneSignalAppId);
await OneSignal.Notifications.requestPermission(true);
// Show notification even when app is in foreground
OneSignal.Notifications.addForegroundWillDisplayListener((event) {
event.notification.display();
});
// Tap → navigate to job detail
OneSignal.Notifications.addClickListener((event) {
final data = event.notification.additionalData;
if (data == null) return;
final jobId = data['job_id'] as String?;
final tenantType = data['tenant_type'] as String?;
if (jobId == null || _router == null) return;
if (tenantType == 'lab') {
_router!.push('/lab/jobs/$jobId');
} else {
_router!.push('/clinic/jobs/$jobId');
}
});
}
/// Call after successful login. Links the OneSignal player to this user.
static Future<void> loginUser(String userId, {bool isLab = false}) async {
if (!_supported) return;
try {
await OneSignal.login(userId);
OneSignal.User.addTagWithKey('tenant_type', isLab ? 'lab' : 'clinic');
} catch (_) {}
}
/// Call on logout.
static Future<void> logoutUser() async {
if (!_supported) return;
try {
await OneSignal.logout();
} catch (_) {}
}
}