initialize static method

Future<void> initialize({
  1. required dynamic onMessageReceived(
    1. Map<String, dynamic>
    ),
  2. required dynamic onNotificationClick(
    1. String?,
    2. String?
    ),
  3. required dynamic onNotificationActionClick(
    1. String,
    2. String?,
    3. String?
    ),
})

Implementation

static Future<void> initialize({
  required Function(Map<String, dynamic>) onMessageReceived,
  required Function(String?, String?) onNotificationClick,
  required Function(String, String?, String?) onNotificationActionClick,
}) async {

  // Get callback handle for background execution
  final CallbackHandle? handle = PluginUtilities.getCallbackHandle(appticsBackgroundCallbackDispatcher);
  if (handle == null) {
    throw Exception('Could not get callback handle for background execution');
  }

  // Set up foreground message handling
  _channel.setMethodCallHandler((call) async {
    switch (call.method) {
      case 'onMessageReceived':
        final dynamic payloadData = call.arguments['payload'];
        final Map<String, dynamic> payload;

        if (payloadData is String) {
          // Parse JSON string to Map
          payload = Map<String, dynamic>.from(json.decode(payloadData));
        } else if (payloadData is Map) {
          // Convert Map to Map<String, dynamic>
          payload = Map<String, dynamic>.from(payloadData);
        } else {
          // Fallback for other types
          payload = <String, dynamic>{};
        }

        onMessageReceived(payload);
        break;
      case 'onNotificationClick':
        final String? clickAction = call.arguments['clickAction'];
        final String? payload = call.arguments['payload'];
        onNotificationClick(clickAction, payload);
        break;
      case 'onNotificationActionClick':
        final String actionId = call.arguments['actionId'];
        final String? clickAction = call.arguments['clickAction'];
        final String? payload = call.arguments['payload'];
        onNotificationActionClick(actionId, clickAction, payload);
        break;
    }
  });

  final CallbackHandle? onMessageHandle;
  final int callbackHandleNumber;
  if (_backgroundOnMessageHandler != null) {
    onMessageHandle =
        PluginUtilities.getCallbackHandle(_backgroundOnMessageHandler!);
    callbackHandleNumber = onMessageHandle!.toRawHandle();
  } else {
    callbackHandleNumber = 0;
  }
  final CallbackHandle? notificationClickHandle;
  final int notificationClickHandleNumber;
  if (_backgroundNotificationClickHandler != null) {
    notificationClickHandle =
        PluginUtilities.getCallbackHandle(_backgroundNotificationClickHandler!);
    notificationClickHandleNumber = notificationClickHandle!.toRawHandle();
  } else {
    notificationClickHandleNumber = 0;
  }
  final CallbackHandle? notificationActionClickHandle;
  final int notificationActionClickHandleNumber;
  if (_backgroundNotificationActionClickHandler != null) {
    notificationActionClickHandle = PluginUtilities.getCallbackHandle(_backgroundNotificationActionClickHandler!);
    notificationActionClickHandleNumber = notificationActionClickHandle!.toRawHandle();
  } else {
    notificationActionClickHandleNumber = 0;
  }


  // Initialize with callback handle
  await _channel.invokeMethod('initialize', {
    'callbackHandle': handle.toRawHandle(),
    'onMessageHandle': callbackHandleNumber,
    'notificationClickHandler': notificationClickHandleNumber,
    'notificationActionClickHandler': notificationActionClickHandleNumber
  });

}