implementAsBlocking static method

NSDraggingDestination implementAsBlocking({
  1. NSDragOperation draggingEntered_(
    1. NSDraggingInfo
    )?,
  2. NSDragOperation draggingUpdated_(
    1. NSDraggingInfo
    )?,
  3. void draggingExited_(
    1. NSDraggingInfo?
    )?,
  4. bool prepareForDragOperation_(
    1. NSDraggingInfo
    )?,
  5. bool performDragOperation_(
    1. NSDraggingInfo
    )?,
  6. void concludeDragOperation_(
    1. NSDraggingInfo?
    )?,
  7. void draggingEnded_(
    1. NSDraggingInfo
    )?,
  8. bool wantsPeriodicDraggingUpdates()?,
  9. void updateDraggingItemsForDrag_(
    1. NSDraggingInfo?
    )?,
  10. bool $keepIsolateAlive = true,
})

Builds an object that implements the NSDraggingDestination protocol. To implement multiple protocols, use addToBuilder or objc.ObjCProtocolBuilder directly. All methods that can be implemented as blocking listeners will be.

If $keepIsolateAlive is true, this protocol will keep this isolate alive until it is garbage collected by both Dart and ObjC.

Implementation

static NSDraggingDestination implementAsBlocking({
  NSDragOperation Function(NSDraggingInfo)? draggingEntered_,
  NSDragOperation Function(NSDraggingInfo)? draggingUpdated_,
  void Function(NSDraggingInfo?)? draggingExited_,
  bool Function(NSDraggingInfo)? prepareForDragOperation_,
  bool Function(NSDraggingInfo)? performDragOperation_,
  void Function(NSDraggingInfo?)? concludeDragOperation_,
  void Function(NSDraggingInfo)? draggingEnded_,
  bool Function()? wantsPeriodicDraggingUpdates,
  void Function(NSDraggingInfo?)? updateDraggingItemsForDrag_,
  bool $keepIsolateAlive = true,
}) {
  final builder = objc.ObjCProtocolBuilder(
    debugName: 'NSDraggingDestination',
  );
  NSDraggingDestination.draggingEntered_.implement(builder, draggingEntered_);
  NSDraggingDestination.draggingUpdated_.implement(builder, draggingUpdated_);
  NSDraggingDestination.draggingExited_.implementAsBlocking(
    builder,
    draggingExited_,
  );
  NSDraggingDestination.prepareForDragOperation_.implement(
    builder,
    prepareForDragOperation_,
  );
  NSDraggingDestination.performDragOperation_.implement(
    builder,
    performDragOperation_,
  );
  NSDraggingDestination.concludeDragOperation_.implementAsBlocking(
    builder,
    concludeDragOperation_,
  );
  NSDraggingDestination.draggingEnded_.implementAsBlocking(
    builder,
    draggingEnded_,
  );
  NSDraggingDestination.wantsPeriodicDraggingUpdates.implement(
    builder,
    wantsPeriodicDraggingUpdates,
  );
  NSDraggingDestination.updateDraggingItemsForDrag_.implementAsBlocking(
    builder,
    updateDraggingItemsForDrag_,
  );
  builder.addProtocol($protocol);
  return NSDraggingDestination.castFrom(
    builder.build(keepIsolateAlive: $keepIsolateAlive),
  );
}