implement static method

NSTextInput implement({
  1. required void insertText_(
    1. ObjCObjectBase object
    ),
  2. required void doCommandBySelector_(
    1. Pointer<ObjCSelector> aSelector
    ),
  3. required void setMarkedText_selectedRange_(
    1. ObjCObjectBase,
    2. NSRange
    ),
  4. required void unmarkText(),
  5. required bool hasMarkedText(),
  6. required int conversationIdentifier(),
  7. required NSAttributedString attributedSubstringFromRange_(
    1. NSRange range
    ),
  8. required NSRange markedRange(),
  9. required NSRange selectedRange(),
  10. required NSRect firstRectForCharacterRange_(
    1. NSRange
    ),
  11. required DartNSInteger characterIndexForPoint_(
    1. NSPoint point
    ),
  12. required NSArray validAttributesForMarkedText(),
  13. bool $keepIsolateAlive = true,
})

Builds an object that implements the NSTextInput protocol. To implement multiple protocols, use addToBuilder or objc.ObjCProtocolBuilder directly.

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

Implementation

static NSTextInput implement({
  required void Function(objc.ObjCObjectBase) insertText_,
  required void Function(ffi.Pointer<objc.ObjCSelector>) doCommandBySelector_,
  required void Function(objc.ObjCObjectBase, NSRange)
  setMarkedText_selectedRange_,
  required void Function() unmarkText,
  required bool Function() hasMarkedText,
  required DartNSInteger Function() conversationIdentifier,
  required NSAttributedString Function(NSRange) attributedSubstringFromRange_,
  required NSRange Function() markedRange,
  required NSRange Function() selectedRange,
  required NSRect Function(NSRange) firstRectForCharacterRange_,
  required DartNSUInteger Function(NSPoint) characterIndexForPoint_,
  required objc.NSArray Function() validAttributesForMarkedText,
  bool $keepIsolateAlive = true,
}) {
  final builder = objc.ObjCProtocolBuilder(debugName: 'NSTextInput');
  NSTextInput.insertText_.implement(builder, insertText_);
  NSTextInput.doCommandBySelector_.implement(builder, doCommandBySelector_);
  NSTextInput.setMarkedText_selectedRange_.implement(
    builder,
    setMarkedText_selectedRange_,
  );
  NSTextInput.unmarkText.implement(builder, unmarkText);
  NSTextInput.hasMarkedText.implement(builder, hasMarkedText);
  NSTextInput.conversationIdentifier.implement(
    builder,
    conversationIdentifier,
  );
  NSTextInput.attributedSubstringFromRange_.implement(
    builder,
    attributedSubstringFromRange_,
  );
  NSTextInput.markedRange.implement(builder, markedRange);
  NSTextInput.selectedRange.implement(builder, selectedRange);
  NSTextInput.firstRectForCharacterRange_.implement(
    builder,
    firstRectForCharacterRange_,
  );
  NSTextInput.characterIndexForPoint_.implement(
    builder,
    characterIndexForPoint_,
  );
  NSTextInput.validAttributesForMarkedText.implement(
    builder,
    validAttributesForMarkedText,
  );
  builder.addProtocol($protocol);
  return NSTextInput.castFrom(
    builder.build(keepIsolateAlive: $keepIsolateAlive),
  );
}