Untitled

 avatar
unknown
plain_text
4 days ago
2.8 kB
2
Indexable
import 'package:firebase_messaging/firebase_messaging.dart';
import 'package:zendo/core/backend/local_storage/local_storage.dart';
import 'package:zendo/core/basic_imports/basic_screen_imports.dart';
import 'package:zendo/modules/profile/backend/model/profile_model.dart';
import 'package:flutter_local_notifications/flutter_local_notifications.dart';

class FireBaseApi {
  final firebaseMessaging = FirebaseMessaging.instance;
  final FlutterLocalNotificationsPlugin flutterLocalNotificationsPlugin =
      FlutterLocalNotificationsPlugin();

  Future<void> initialize() async {
    await firebaseMessaging.requestPermission();
    final fcmToken = await firebaseMessaging.getToken();
    FirebaseMessaging.instance.subscribeToTopic("all_users");

    print("tokenfcm $fcmToken");

    const AndroidInitializationSettings androidSettings =
        AndroidInitializationSettings('@mipmap/ic_launcher');
    const InitializationSettings initializationSettings =
        InitializationSettings(android: androidSettings);
    await flutterLocalNotificationsPlugin.initialize(initializationSettings,
        onDidReceiveNotificationResponse: (NotificationResponse response) {
      _handleMessage(_lastRemoteMessage!);
    });

    FirebaseMessaging.onMessage.listen((RemoteMessage message) {
      _showLocalNotification(message);
    });

    FirebaseMessaging.onMessageOpenedApp.listen((RemoteMessage message) {
      _handleMessage(message);
    });

    final RemoteMessage? initialMessage =
        await firebaseMessaging.getInitialMessage();
    if (initialMessage != null) {
      _handleMessage(initialMessage);
    }
  }

  RemoteMessage? _lastRemoteMessage;
  ProfileModel? profile;

  void _handleMessage(RemoteMessage message) async {
    _lastRemoteMessage = message;
    final token = LocalStorage.getToken();
    if (token == null || token.isEmpty) {
      Get.offAllNamed(Routes.loginRegisterScreen);
      return;
    } else {
      Get.toNamed(Routes.dashboardScreen);
    }
  }

  Future<void> _showLocalNotification(RemoteMessage message) async {
    const AndroidNotificationDetails androidPlatformChannelSpecifics =
        AndroidNotificationDetails(
      'high_importance_channel',
      'High Importance Notifications',
      importance: Importance.max,
      priority: Priority.high,
      ticker: 'ticker',
    );

    const NotificationDetails notificationDetails =
        NotificationDetails(android: androidPlatformChannelSpecifics);

    await flutterLocalNotificationsPlugin.show(
      0,
      message.notification?.title ?? 'Notifikasi',
      message.notification?.body ?? 'Detail notifikasi',
      notificationDetails,
      payload: 'payload',
    );
  }
}
Editor is loading...
Leave a Comment