callbackHandler function

void callbackHandler()

Implementation

@pragma('vm:entry-point')
void callbackHandler() {
  const backgroundChannel = MethodChannel(backgroundChannelID);
  WidgetsFlutterBinding.ensureInitialized();

  backgroundChannel.setMethodCallHandler((MethodCall call) async {
    if (bcmLocation == call.method) {
      final Map<dynamic, dynamic> args = call.arguments as Map;

      int callbackArg = args[argCallback] as int? ?? 0;
      if (callbackArg != 0) {
        final callback =
            PluginUtilities.getCallbackFromHandle(CallbackHandle.fromRawHandle(callbackArg));
        if (callback != null) {
          var locs = List<Location>.empty(growable: true);
          var locations = args[argLocations] as Iterable?;
          if (locations != null && '$locations' != '[]') {
            for (var loc in locations) {
              locs.add(Location.fromJson(loc as Map));
            }
          } else {
            locs.add(Location.fromJson(args[argLocation] as Map));
          }
          callback(locs);
        }
      }
    } else if (bcmNotificationAction == call.method) {
      final Map<dynamic, dynamic> args = call.arguments as Map;

      int callbackArg = args[argCallback] as int? ?? 0;
      if (callbackArg != 0) {
        final callback =
            PluginUtilities.getCallbackFromHandle(CallbackHandle.fromRawHandle(callbackArg));
        final dynamic locationJson = args[argLocation];
        Location? location;
        if (locationJson != null) {
          location = Location.fromJson(locationJson as Map);
        }
        if (callback != null) {
          callback(location);
        }
      }
    }
  });
  backgroundChannel.invokeMethod('BackgroundLocationService.initialized');
}