import 'package:firebase_messaging/firebase_messaging.dart'; import 'package:flutter/foundation.dart'; import 'package:go_router/go_router.dart'; import 'package:hoshan/core/routes/route_generator.dart'; import 'package:hoshan/data/model/ai/bots_model.dart'; import 'package:hoshan/data/model/chat_args.dart'; import 'package:hoshan/main.dart'; class FirebasApi { static final _firebaseMessaging = FirebaseMessaging.instance; static Bots? bot; static String? fcmToken; static Future initialNotifications() async { await refreshToken(); initPushNotification(); } static Future refreshToken() async { await _firebaseMessaging.requestPermission(); fcmToken = await _firebaseMessaging.getToken(); if (kDebugMode) { print('fCMToken: $fcmToken'); } } static Future deleteToken() async { try { await _firebaseMessaging.deleteToken(); } catch (e) { if (kDebugMode) { print('Error while firebaseMessaging deleteToken: $e'); } } } static void handleMessage(RemoteMessage? message) async { if (message == null) return; bot = Bots.fromNotification(message.data); if (navigatorKey.currentState != null) { if (bot!.tool ?? false) { navigatorKey.currentContext?.go(Routes.assistant, extra: bot!.id); } else { navigatorKey.currentContext ?.go(Routes.chat, extra: ChatArgs(bot: bot!)); } bot = null; } } static Future initPushNotification() async { FirebaseMessaging.instance.getInitialMessage().then(handleMessage); FirebaseMessaging.onMessageOpenedApp.listen(handleMessage); } }