appticsBackgroundCallbackDispatcher function

Future<void> appticsBackgroundCallbackDispatcher()

Implementation

@pragma('vm:entry-point')
Future<void> appticsBackgroundCallbackDispatcher() async {
  // Initialize Flutter bindings for background isolate
  WidgetsFlutterBinding.ensureInitialized();

  // Create method channel with explicit binary messenger
  final MethodChannel backgroundChannel = MethodChannel(
    'com.zoho.apptics.flutter/push_background',
    const StandardMethodCodec(),
    ServicesBinding.instance.defaultBinaryMessenger,
  );

  backgroundChannel.setMethodCallHandler((call) async {
    print("Received background method call: ${call.method}");
    switch (call.method) {
      case 'handleBackgroundEvent':
        try {
          final Map<String, dynamic> args =
              Map<String, dynamic>.from(call.arguments);
          final String eventType = args['type'] as String;
          final Map<String, dynamic> data =
              Map<String, dynamic>.from(args['data']);
          final onMessageHandler = args['onMessageHandler'] as int?;
          final notificationClickHandler =
              args['notificationClickHandler'] as int?;
          final notificationActionClickHandler =
              args['notificationActionClickHandler'] as int?;


          switch(eventType)
          {
            case "onMessageReceived":
              final onMessageHandlerClosure = onMessageHandler != null
                  ? PluginUtilities.getCallbackFromHandle(
                  CallbackHandle.fromRawHandle(onMessageHandler))
              as OnMessageHandler?
                  : null;
              if (onMessageHandlerClosure != null) {
                onMessageHandlerClosure(data);
              }
              break;
            case "onNotificationClick":
              final notificationClickHandlerClosure = notificationClickHandler !=
                  null
                  ? PluginUtilities.getCallbackFromHandle(
                  CallbackHandle.fromRawHandle(notificationClickHandler))
              as NotificationClick?
                  : null;

              if (notificationClickHandlerClosure != null) {
                notificationClickHandlerClosure(
                    data['clickAction'] as String?, data['payload'] as String?);
              }
              break;
            case "onNotificationActionClick":
              final notificationActionClickHandlerClosure =
              notificationActionClickHandler != null
                  ? PluginUtilities.getCallbackFromHandle(
                  CallbackHandle.fromRawHandle(
                      notificationActionClickHandler))
              as NotificationActionClick?
                  : null;
              if (notificationActionClickHandlerClosure != null) {
                notificationActionClickHandlerClosure(data['actionId'] as String,
                    data['clickAction'] as String?, data['payload'] as String?);
              }
              break;
            default:
              break;
          }
          return true;
        } catch (e) {
          return false;
        }
    }
    return null;
  });

  print("Background callback dispatcher initialized successfully!");
}