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!");
}