callbackDispatcher function

void callbackDispatcher()

Implementation

@pragma('vm:entry-point')
void callbackDispatcher() {
  const MethodChannel _backgroundChannel = MethodChannel(
    Keys.BACKGROUND_CHANNEL_ID,
  );
  WidgetsFlutterBinding.ensureInitialized();

  _backgroundChannel.setMethodCallHandler((MethodCall call) async {
    if (Keys.BCM_SEND_LOCATION == call.method) {
      final Map<dynamic, dynamic> args = call.arguments;
      final Function? callback =
          PluginUtilities.getCallbackFromHandle(
            CallbackHandle.fromRawHandle(args[Keys.ARG_CALLBACK]),
          )!;
      final LocationDto location = LocationDto.fromJson(
        args[Keys.ARG_LOCATION],
      );
      if (callback != null) {
        callback(location);
      }
    } else if (Keys.BCM_NOTIFICATION_CLICK == call.method) {
      final Map<dynamic, dynamic> args = call.arguments;
      final Function? notificationCallback =
          PluginUtilities.getCallbackFromHandle(
            CallbackHandle.fromRawHandle(args[Keys.ARG_NOTIFICATION_CALLBACK]),
          );
      if (notificationCallback != null) {
        notificationCallback();
      }
    } else if (Keys.BCM_INIT == call.method) {
      final Map<dynamic, dynamic> args = call.arguments;
      final Function? initCallback = PluginUtilities.getCallbackFromHandle(
        CallbackHandle.fromRawHandle(args[Keys.ARG_INIT_CALLBACK]),
      );
      Map<dynamic, dynamic>? data = args[Keys.ARG_INIT_DATA_CALLBACK];
      if (initCallback != null) {
        initCallback(data);
      }
    } else if (Keys.BCM_DISPOSE == call.method) {
      final Map<dynamic, dynamic> args = call.arguments;
      final Function? disposeCallback = PluginUtilities.getCallbackFromHandle(
        CallbackHandle.fromRawHandle(args[Keys.ARG_DISPOSE_CALLBACK]),
      );
      if (disposeCallback != null) {
        disposeCallback();
      }
    }
  });
  _backgroundChannel.invokeMethod(Keys.METHOD_SERVICE_INITIALIZED);
}