Allow OS notifications
This commit is contained in:
@@ -7,6 +7,8 @@ import 'package:flutter_dotenv/flutter_dotenv.dart';
|
||||
import 'app.dart';
|
||||
import 'providers/notifications_provider.dart';
|
||||
import 'utils/app_time.dart';
|
||||
import 'utils/notification_permission.dart';
|
||||
import 'services/notification_service.dart';
|
||||
|
||||
Future<void> main() async {
|
||||
WidgetsFlutterBinding.ensureInitialized();
|
||||
@@ -25,6 +27,29 @@ Future<void> main() async {
|
||||
|
||||
await Supabase.initialize(url: supabaseUrl, anonKey: supabaseAnonKey);
|
||||
|
||||
// on Android 13+ we must request POST_NOTIFICATIONS at runtime; without it
|
||||
// notifications are automatically denied and cannot be re‑enabled from the
|
||||
// system settings. The helper uses `permission_handler`.
|
||||
final granted = await ensureNotificationPermission();
|
||||
if (!granted) {
|
||||
// we don’t block startup, but it’s worth logging so developers notice. A
|
||||
// real app might show a dialog pointing the user to settings.
|
||||
// debugPrint('notification permission not granted');
|
||||
}
|
||||
|
||||
// initialize the local notifications plugin so we can post alerts later
|
||||
await NotificationService.initialize(
|
||||
onDidReceiveNotificationResponse: (response) {
|
||||
// handle user tapping a notification; the payload format is up to us
|
||||
final payload = response.payload;
|
||||
if (payload != null && payload.startsWith('ticket:')) {
|
||||
// ignore if context not mounted; we might use a navigator key in real
|
||||
// app, but keep this simple for now
|
||||
// TODO: navigate to ticket/task as appropriate
|
||||
}
|
||||
},
|
||||
);
|
||||
|
||||
runApp(
|
||||
ProviderScope(
|
||||
observers: [NotificationSoundObserver()],
|
||||
@@ -48,6 +73,12 @@ class NotificationSoundObserver extends ProviderObserver {
|
||||
final next = newValue as int?;
|
||||
if (prev != null && next != null && next > prev) {
|
||||
_player.play(AssetSource('tasq_notification.wav'));
|
||||
// also post a system notification so the user sees it outside the app
|
||||
NotificationService.show(
|
||||
id: DateTime.now().millisecondsSinceEpoch ~/ 1000,
|
||||
title: 'New notifications',
|
||||
body: 'You have $next unread notifications.',
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user