wip
diff --git a/pkgs/ffigen/lib/src/code_generator/objc_methods.dart b/pkgs/ffigen/lib/src/code_generator/objc_methods.dart
index 2ac187d..78f41c5 100644
--- a/pkgs/ffigen/lib/src/code_generator/objc_methods.dart
+++ b/pkgs/ffigen/lib/src/code_generator/objc_methods.dart
@@ -30,14 +30,12 @@
void addMethod(ObjCMethod? method) {
if (method == null) return;
- if (_shouldIncludeMethod(method)) {
- final oldMethod = getSimilarMethod(method);
- if (oldMethod != null) {
- _methods[method.key] = _maybeReplaceMethod(oldMethod, method);
- } else {
- _methods[method.key] = method;
- _order.add(method.key);
- }
+ final oldMethod = getSimilarMethod(method);
+ if (oldMethod != null) {
+ _methods[method.key] = _maybeReplaceMethod(oldMethod, method);
+ } else {
+ _methods[method.key] = method;
+ _order.add(method.key);
}
}
@@ -89,20 +87,6 @@
return newMethod;
}
- bool _shouldIncludeMethod(ObjCMethod method) =>
- method.childTypes.every((Type t) {
- t = t.typealiasType.baseType;
-
- // Ignore methods with block args or rets when we're generating in
- // package:objective_c.
- // TODO(https://github.com/dart-lang/native/issues/1180): Remove this.
- if (builtInFunctions.generateForPackageObjectiveC && t is ObjCBlock) {
- return false;
- }
-
- return true;
- });
-
UniqueNamer createMethodRenamer(Writer w) =>
UniqueNamer(parent: w.topLevelUniqueNamer)
..markAllUsed([
diff --git a/pkgs/ffigen/lib/src/header_parser/parser.dart b/pkgs/ffigen/lib/src/header_parser/parser.dart
index 1680d7f..711cd27 100644
--- a/pkgs/ffigen/lib/src/header_parser/parser.dart
+++ b/pkgs/ffigen/lib/src/header_parser/parser.dart
@@ -167,6 +167,12 @@
@visibleForTesting
List<Binding> transformBindings(Config config, List<Binding> bindings) {
+
+ bindings
+ .whereType<ObjCInterface>()
+ .where((o) => o.originalName == 'DOBJCObserver')
+ .single.methods.forEach(print);
+
visit(CopyMethodsFromSuperTypesVisitation(), bindings);
visit(FixOverriddenMethodsVisitation(), bindings);
visit(FillMethodDependenciesVisitation(), bindings);
diff --git a/pkgs/ffigen/lib/src/header_parser/sub_parsers/objcinterfacedecl_parser.dart b/pkgs/ffigen/lib/src/header_parser/sub_parsers/objcinterfacedecl_parser.dart
index 0db4ef1..1ac8339 100644
--- a/pkgs/ffigen/lib/src/header_parser/sub_parsers/objcinterfacedecl_parser.dart
+++ b/pkgs/ffigen/lib/src/header_parser/sub_parsers/objcinterfacedecl_parser.dart
@@ -53,6 +53,8 @@
_logger.fine('++++ Filling ObjC interface: '
'Name: ${itf.originalName}, ${cursor.completeStringRepr()}');
+ final debug = itf.originalName == 'DOBJCObserver';
+
final itfDecl = Declaration(usr: itf.usr, originalName: itf.originalName);
cursor.visitChildren((child) {
switch (child.kind) {
@@ -71,11 +73,17 @@
break;
case clang_types.CXCursorKind.CXCursor_ObjCInstanceMethodDecl:
case clang_types.CXCursorKind.CXCursor_ObjCClassMethodDecl:
- itf.addMethod(parseObjCMethod(child, itfDecl, config.objcInterfaces));
+ itf.addMethod(parseObjCMethod(child, itfDecl, config.objcInterfaces, debug: debug));
break;
}
});
+ if (debug) {
+ print('\nQWER');
+ itf.methods.forEach(print);
+ print('\n');
+ }
+
_logger.fine('++++ Finished ObjC interface: '
'Name: ${itf.originalName}, ${cursor.completeStringRepr()}');
}
@@ -187,8 +195,12 @@
}
ObjCMethod? parseObjCMethod(clang_types.CXCursor cursor, Declaration itfDecl,
- DeclarationFilters filters) {
+ DeclarationFilters filters, {bool debug = false}) {
final methodName = cursor.spelling();
+ debug = debug && methodName == 'initForKeyPath:ofObject:withBlock:';
+ if (debug) {
+ cursor.printAst();
+ }
final isClassMethod =
cursor.kind == clang_types.CXCursorKind.CXCursor_ObjCClassMethodDecl;
final isOptionalMethod = clang.clang_Cursor_isObjCOptional(cursor) != 0;
@@ -197,6 +209,7 @@
_logger.warning('Method "$methodName" in instance '
'"${itfDecl.originalName}" has incomplete '
'return type: $returnType.');
+ if (debug) print('ZXCV: 1');
return null;
}
@@ -204,6 +217,7 @@
if (apiAvailability.availability == Availability.none) {
_logger
.info('Omitting deprecated method ${itfDecl.originalName}.$methodName');
+ if (debug) print('ZXCV: 2');
return null;
}
@@ -246,6 +260,7 @@
}
});
method.finalizeParams();
+ if (debug) print('ZXCV: 3 $hasError\n\t$method');
return hasError ? null : method;
}
diff --git a/pkgs/objective_c/ffigen_objc.yaml b/pkgs/objective_c/ffigen_objc.yaml
index 27e7ad2..8609d11 100644
--- a/pkgs/objective_c/ffigen_objc.yaml
+++ b/pkgs/objective_c/ffigen_objc.yaml
@@ -10,6 +10,7 @@
- 'src/foundation.h'
- 'src/input_stream_adapter.h'
- 'src/ns_number.h'
+ - 'src/observer.h'
- 'src/protocol.h'
ffi-native:
exclude-all-by-default: true
@@ -28,6 +29,7 @@
- DOBJCDartInputStreamAdapter
- DOBJCDartProtocolBuilder
- DOBJCDartProtocol
+ - DOBJCObserver
- NSArray
- NSCharacterSet
- NSCoder
@@ -158,6 +160,7 @@
typedefs:
include:
- 'CFStringRef'
+ - 'DOBJCObserverBlock'
preamble: |
// Copyright (c) 2024, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
diff --git a/pkgs/objective_c/ios/Classes/objective_c.m b/pkgs/objective_c/ios/Classes/objective_c.m
index 745ecab..b3ce4fb 100644
--- a/pkgs/objective_c/ios/Classes/objective_c.m
+++ b/pkgs/objective_c/ios/Classes/objective_c.m
@@ -7,4 +7,5 @@
#include "../../src/input_stream_adapter.m"
#include "../../src/objective_c.m"
#include "../../src/objective_c_bindings_generated.m"
+#include "../../src/observer.m"
#include "../../src/protocol.m"
diff --git a/pkgs/objective_c/lib/src/objective_c_bindings_generated.dart b/pkgs/objective_c/lib/src/objective_c_bindings_generated.dart
index 92af210..96fd9a3 100644
--- a/pkgs/objective_c/lib/src/objective_c_bindings_generated.dart
+++ b/pkgs/objective_c/lib/src/objective_c_bindings_generated.dart
@@ -135,6 +135,20 @@
);
@ffi.Native<
+ ffi.Pointer<objc.ObjCObject> Function(
+ ffi.Pointer<objc.ObjCObject>,
+ ffi.Pointer<ffi.Void>,
+ ffi.Pointer<objc.ObjCObject>,
+ ffi.Pointer<objc.ObjCBlockImpl>)>()
+external ffi.Pointer<objc.ObjCObject>
+ _ObjectiveCBindings_protocolTrampoline_1q0i84(
+ ffi.Pointer<objc.ObjCObject> target,
+ ffi.Pointer<ffi.Void> arg0,
+ ffi.Pointer<objc.ObjCObject> arg1,
+ ffi.Pointer<objc.ObjCBlockImpl> arg2,
+);
+
+@ffi.Native<
ffi.Bool Function(ffi.Pointer<objc.ObjCObject>, ffi.Pointer<ffi.Void>,
ffi.Pointer<objc.ObjCObject>)>()
external bool _ObjectiveCBindings_protocolTrampoline_3su7tt(
@@ -241,6 +255,54 @@
ffi.Pointer<objc.ObjCBlockImpl>,
ffi.Pointer<objc.DOBJC_Context>)>(isLeaf: true)
external ffi.Pointer<objc.ObjCBlockImpl>
+ _ObjectiveCBindings_wrapBlockingBlock_1o83rbn(
+ ffi.Pointer<objc.ObjCBlockImpl> block,
+ ffi.Pointer<objc.ObjCBlockImpl> listnerBlock,
+ ffi.Pointer<objc.DOBJC_Context> context,
+);
+
+@ffi.Native<
+ ffi.Pointer<objc.ObjCBlockImpl> Function(
+ ffi.Pointer<objc.ObjCBlockImpl>,
+ ffi.Pointer<objc.ObjCBlockImpl>,
+ ffi.Pointer<objc.DOBJC_Context>)>(isLeaf: true)
+external ffi.Pointer<objc.ObjCBlockImpl>
+ _ObjectiveCBindings_wrapBlockingBlock_1p9ui4q(
+ ffi.Pointer<objc.ObjCBlockImpl> block,
+ ffi.Pointer<objc.ObjCBlockImpl> listnerBlock,
+ ffi.Pointer<objc.DOBJC_Context> context,
+);
+
+@ffi.Native<
+ ffi.Pointer<objc.ObjCBlockImpl> Function(
+ ffi.Pointer<objc.ObjCBlockImpl>,
+ ffi.Pointer<objc.ObjCBlockImpl>,
+ ffi.Pointer<objc.DOBJC_Context>)>(isLeaf: true)
+external ffi.Pointer<objc.ObjCBlockImpl>
+ _ObjectiveCBindings_wrapBlockingBlock_1pl9qdv(
+ ffi.Pointer<objc.ObjCBlockImpl> block,
+ ffi.Pointer<objc.ObjCBlockImpl> listnerBlock,
+ ffi.Pointer<objc.DOBJC_Context> context,
+);
+
+@ffi.Native<
+ ffi.Pointer<objc.ObjCBlockImpl> Function(
+ ffi.Pointer<objc.ObjCBlockImpl>,
+ ffi.Pointer<objc.ObjCBlockImpl>,
+ ffi.Pointer<objc.DOBJC_Context>)>(isLeaf: true)
+external ffi.Pointer<objc.ObjCBlockImpl>
+ _ObjectiveCBindings_wrapBlockingBlock_1q8ia8l(
+ ffi.Pointer<objc.ObjCBlockImpl> block,
+ ffi.Pointer<objc.ObjCBlockImpl> listnerBlock,
+ ffi.Pointer<objc.DOBJC_Context> context,
+);
+
+@ffi.Native<
+ ffi.Pointer<objc.ObjCBlockImpl> Function(
+ ffi.Pointer<objc.ObjCBlockImpl>,
+ ffi.Pointer<objc.ObjCBlockImpl>,
+ ffi.Pointer<objc.DOBJC_Context>)>(isLeaf: true)
+external ffi.Pointer<objc.ObjCBlockImpl>
_ObjectiveCBindings_wrapBlockingBlock_hoampi(
ffi.Pointer<objc.ObjCBlockImpl> block,
ffi.Pointer<objc.ObjCBlockImpl> listnerBlock,
@@ -253,6 +315,18 @@
ffi.Pointer<objc.ObjCBlockImpl>,
ffi.Pointer<objc.DOBJC_Context>)>(isLeaf: true)
external ffi.Pointer<objc.ObjCBlockImpl>
+ _ObjectiveCBindings_wrapBlockingBlock_lmc3p5(
+ ffi.Pointer<objc.ObjCBlockImpl> block,
+ ffi.Pointer<objc.ObjCBlockImpl> listnerBlock,
+ ffi.Pointer<objc.DOBJC_Context> context,
+);
+
+@ffi.Native<
+ ffi.Pointer<objc.ObjCBlockImpl> Function(
+ ffi.Pointer<objc.ObjCBlockImpl>,
+ ffi.Pointer<objc.ObjCBlockImpl>,
+ ffi.Pointer<objc.DOBJC_Context>)>(isLeaf: true)
+external ffi.Pointer<objc.ObjCBlockImpl>
_ObjectiveCBindings_wrapBlockingBlock_ovsamd(
ffi.Pointer<objc.ObjCBlockImpl> block,
ffi.Pointer<objc.ObjCBlockImpl> listnerBlock,
@@ -273,6 +347,102 @@
@ffi.Native<
ffi.Pointer<objc.ObjCBlockImpl> Function(
+ ffi.Pointer<objc.ObjCBlockImpl>,
+ ffi.Pointer<objc.ObjCBlockImpl>,
+ ffi.Pointer<objc.DOBJC_Context>)>(isLeaf: true)
+external ffi.Pointer<objc.ObjCBlockImpl>
+ _ObjectiveCBindings_wrapBlockingBlock_q5jeyk(
+ ffi.Pointer<objc.ObjCBlockImpl> block,
+ ffi.Pointer<objc.ObjCBlockImpl> listnerBlock,
+ ffi.Pointer<objc.DOBJC_Context> context,
+);
+
+@ffi.Native<
+ ffi.Pointer<objc.ObjCBlockImpl> Function(
+ ffi.Pointer<objc.ObjCBlockImpl>,
+ ffi.Pointer<objc.ObjCBlockImpl>,
+ ffi.Pointer<objc.DOBJC_Context>)>(isLeaf: true)
+external ffi.Pointer<objc.ObjCBlockImpl>
+ _ObjectiveCBindings_wrapBlockingBlock_r8gdi7(
+ ffi.Pointer<objc.ObjCBlockImpl> block,
+ ffi.Pointer<objc.ObjCBlockImpl> listnerBlock,
+ ffi.Pointer<objc.DOBJC_Context> context,
+);
+
+@ffi.Native<
+ ffi.Pointer<objc.ObjCBlockImpl> Function(
+ ffi.Pointer<objc.ObjCBlockImpl>,
+ ffi.Pointer<objc.ObjCBlockImpl>,
+ ffi.Pointer<objc.DOBJC_Context>)>(isLeaf: true)
+external ffi.Pointer<objc.ObjCBlockImpl>
+ _ObjectiveCBindings_wrapBlockingBlock_rnu2c5(
+ ffi.Pointer<objc.ObjCBlockImpl> block,
+ ffi.Pointer<objc.ObjCBlockImpl> listnerBlock,
+ ffi.Pointer<objc.DOBJC_Context> context,
+);
+
+@ffi.Native<
+ ffi.Pointer<objc.ObjCBlockImpl> Function(
+ ffi.Pointer<objc.ObjCBlockImpl>,
+ ffi.Pointer<objc.ObjCBlockImpl>,
+ ffi.Pointer<objc.DOBJC_Context>)>(isLeaf: true)
+external ffi.Pointer<objc.ObjCBlockImpl>
+ _ObjectiveCBindings_wrapBlockingBlock_t8l8el(
+ ffi.Pointer<objc.ObjCBlockImpl> block,
+ ffi.Pointer<objc.ObjCBlockImpl> listnerBlock,
+ ffi.Pointer<objc.DOBJC_Context> context,
+);
+
+@ffi.Native<
+ ffi.Pointer<objc.ObjCBlockImpl> Function(
+ ffi.Pointer<objc.ObjCBlockImpl>,
+ ffi.Pointer<objc.ObjCBlockImpl>,
+ ffi.Pointer<objc.DOBJC_Context>)>(isLeaf: true)
+external ffi.Pointer<objc.ObjCBlockImpl>
+ _ObjectiveCBindings_wrapBlockingBlock_vhbh5h(
+ ffi.Pointer<objc.ObjCBlockImpl> block,
+ ffi.Pointer<objc.ObjCBlockImpl> listnerBlock,
+ ffi.Pointer<objc.DOBJC_Context> context,
+);
+
+@ffi.Native<
+ ffi.Pointer<objc.ObjCBlockImpl> Function(
+ ffi.Pointer<objc.ObjCBlockImpl>,
+ ffi.Pointer<objc.ObjCBlockImpl>,
+ ffi.Pointer<objc.DOBJC_Context>)>(isLeaf: true)
+external ffi.Pointer<objc.ObjCBlockImpl>
+ _ObjectiveCBindings_wrapBlockingBlock_xtuoz7(
+ ffi.Pointer<objc.ObjCBlockImpl> block,
+ ffi.Pointer<objc.ObjCBlockImpl> listnerBlock,
+ ffi.Pointer<objc.DOBJC_Context> context,
+);
+
+@ffi.Native<
+ ffi.Pointer<objc.ObjCBlockImpl> Function(
+ ffi.Pointer<objc.ObjCBlockImpl>,
+ ffi.Pointer<objc.ObjCBlockImpl>,
+ ffi.Pointer<objc.DOBJC_Context>)>(isLeaf: true)
+external ffi.Pointer<objc.ObjCBlockImpl>
+ _ObjectiveCBindings_wrapBlockingBlock_zkjmn1(
+ ffi.Pointer<objc.ObjCBlockImpl> block,
+ ffi.Pointer<objc.ObjCBlockImpl> listnerBlock,
+ ffi.Pointer<objc.DOBJC_Context> context,
+);
+
+@ffi.Native<
+ ffi.Pointer<objc.ObjCBlockImpl> Function(
+ ffi.Pointer<objc.ObjCBlockImpl>,
+ ffi.Pointer<objc.ObjCBlockImpl>,
+ ffi.Pointer<objc.DOBJC_Context>)>(isLeaf: true)
+external ffi.Pointer<objc.ObjCBlockImpl>
+ _ObjectiveCBindings_wrapBlockingBlock_zuf90e(
+ ffi.Pointer<objc.ObjCBlockImpl> block,
+ ffi.Pointer<objc.ObjCBlockImpl> listnerBlock,
+ ffi.Pointer<objc.DOBJC_Context> context,
+);
+
+@ffi.Native<
+ ffi.Pointer<objc.ObjCBlockImpl> Function(
ffi.Pointer<objc.ObjCBlockImpl>)>(isLeaf: true)
external ffi.Pointer<objc.ObjCBlockImpl>
_ObjectiveCBindings_wrapListenerBlock_18v1jvf(
@@ -291,6 +461,38 @@
ffi.Pointer<objc.ObjCBlockImpl> Function(
ffi.Pointer<objc.ObjCBlockImpl>)>(isLeaf: true)
external ffi.Pointer<objc.ObjCBlockImpl>
+ _ObjectiveCBindings_wrapListenerBlock_1o83rbn(
+ ffi.Pointer<objc.ObjCBlockImpl> block,
+);
+
+@ffi.Native<
+ ffi.Pointer<objc.ObjCBlockImpl> Function(
+ ffi.Pointer<objc.ObjCBlockImpl>)>(isLeaf: true)
+external ffi.Pointer<objc.ObjCBlockImpl>
+ _ObjectiveCBindings_wrapListenerBlock_1p9ui4q(
+ ffi.Pointer<objc.ObjCBlockImpl> block,
+);
+
+@ffi.Native<
+ ffi.Pointer<objc.ObjCBlockImpl> Function(
+ ffi.Pointer<objc.ObjCBlockImpl>)>(isLeaf: true)
+external ffi.Pointer<objc.ObjCBlockImpl>
+ _ObjectiveCBindings_wrapListenerBlock_1pl9qdv(
+ ffi.Pointer<objc.ObjCBlockImpl> block,
+);
+
+@ffi.Native<
+ ffi.Pointer<objc.ObjCBlockImpl> Function(
+ ffi.Pointer<objc.ObjCBlockImpl>)>(isLeaf: true)
+external ffi.Pointer<objc.ObjCBlockImpl>
+ _ObjectiveCBindings_wrapListenerBlock_1q8ia8l(
+ ffi.Pointer<objc.ObjCBlockImpl> block,
+);
+
+@ffi.Native<
+ ffi.Pointer<objc.ObjCBlockImpl> Function(
+ ffi.Pointer<objc.ObjCBlockImpl>)>(isLeaf: true)
+external ffi.Pointer<objc.ObjCBlockImpl>
_ObjectiveCBindings_wrapListenerBlock_hoampi(
ffi.Pointer<objc.ObjCBlockImpl> block,
);
@@ -299,6 +501,14 @@
ffi.Pointer<objc.ObjCBlockImpl> Function(
ffi.Pointer<objc.ObjCBlockImpl>)>(isLeaf: true)
external ffi.Pointer<objc.ObjCBlockImpl>
+ _ObjectiveCBindings_wrapListenerBlock_lmc3p5(
+ ffi.Pointer<objc.ObjCBlockImpl> block,
+);
+
+@ffi.Native<
+ ffi.Pointer<objc.ObjCBlockImpl> Function(
+ ffi.Pointer<objc.ObjCBlockImpl>)>(isLeaf: true)
+external ffi.Pointer<objc.ObjCBlockImpl>
_ObjectiveCBindings_wrapListenerBlock_ovsamd(
ffi.Pointer<objc.ObjCBlockImpl> block,
);
@@ -311,6 +521,70 @@
ffi.Pointer<objc.ObjCBlockImpl> block,
);
+@ffi.Native<
+ ffi.Pointer<objc.ObjCBlockImpl> Function(
+ ffi.Pointer<objc.ObjCBlockImpl>)>(isLeaf: true)
+external ffi.Pointer<objc.ObjCBlockImpl>
+ _ObjectiveCBindings_wrapListenerBlock_q5jeyk(
+ ffi.Pointer<objc.ObjCBlockImpl> block,
+);
+
+@ffi.Native<
+ ffi.Pointer<objc.ObjCBlockImpl> Function(
+ ffi.Pointer<objc.ObjCBlockImpl>)>(isLeaf: true)
+external ffi.Pointer<objc.ObjCBlockImpl>
+ _ObjectiveCBindings_wrapListenerBlock_r8gdi7(
+ ffi.Pointer<objc.ObjCBlockImpl> block,
+);
+
+@ffi.Native<
+ ffi.Pointer<objc.ObjCBlockImpl> Function(
+ ffi.Pointer<objc.ObjCBlockImpl>)>(isLeaf: true)
+external ffi.Pointer<objc.ObjCBlockImpl>
+ _ObjectiveCBindings_wrapListenerBlock_rnu2c5(
+ ffi.Pointer<objc.ObjCBlockImpl> block,
+);
+
+@ffi.Native<
+ ffi.Pointer<objc.ObjCBlockImpl> Function(
+ ffi.Pointer<objc.ObjCBlockImpl>)>(isLeaf: true)
+external ffi.Pointer<objc.ObjCBlockImpl>
+ _ObjectiveCBindings_wrapListenerBlock_t8l8el(
+ ffi.Pointer<objc.ObjCBlockImpl> block,
+);
+
+@ffi.Native<
+ ffi.Pointer<objc.ObjCBlockImpl> Function(
+ ffi.Pointer<objc.ObjCBlockImpl>)>(isLeaf: true)
+external ffi.Pointer<objc.ObjCBlockImpl>
+ _ObjectiveCBindings_wrapListenerBlock_vhbh5h(
+ ffi.Pointer<objc.ObjCBlockImpl> block,
+);
+
+@ffi.Native<
+ ffi.Pointer<objc.ObjCBlockImpl> Function(
+ ffi.Pointer<objc.ObjCBlockImpl>)>(isLeaf: true)
+external ffi.Pointer<objc.ObjCBlockImpl>
+ _ObjectiveCBindings_wrapListenerBlock_xtuoz7(
+ ffi.Pointer<objc.ObjCBlockImpl> block,
+);
+
+@ffi.Native<
+ ffi.Pointer<objc.ObjCBlockImpl> Function(
+ ffi.Pointer<objc.ObjCBlockImpl>)>(isLeaf: true)
+external ffi.Pointer<objc.ObjCBlockImpl>
+ _ObjectiveCBindings_wrapListenerBlock_zkjmn1(
+ ffi.Pointer<objc.ObjCBlockImpl> block,
+);
+
+@ffi.Native<
+ ffi.Pointer<objc.ObjCBlockImpl> Function(
+ ffi.Pointer<objc.ObjCBlockImpl>)>(isLeaf: true)
+external ffi.Pointer<objc.ObjCBlockImpl>
+ _ObjectiveCBindings_wrapListenerBlock_zuf90e(
+ ffi.Pointer<objc.ObjCBlockImpl> block,
+);
+
@ffi.Packed(2)
final class AEDesc extends ffi.Struct {
@ffi.UnsignedInt()
@@ -347,6 +621,120 @@
external double height;
}
+/// Represents a single KVO observation. Each observation uses a new
+/// DOBJCObserver, even for the same observed object and keyPath.
+class DOBJCObserver extends NSObject {
+ DOBJCObserver._(ffi.Pointer<objc.ObjCObject> pointer,
+ {bool retain = false, bool release = false})
+ : super.castFromPointer(pointer, retain: retain, release: release);
+
+ /// Constructs a [DOBJCObserver] that points to the same underlying object as [other].
+ DOBJCObserver.castFrom(objc.ObjCObjectBase other)
+ : this._(other.ref.pointer, retain: true, release: true);
+
+ /// Constructs a [DOBJCObserver] that wraps the given raw object pointer.
+ DOBJCObserver.castFromPointer(ffi.Pointer<objc.ObjCObject> other,
+ {bool retain = false, bool release = false})
+ : this._(other, retain: retain, release: release);
+
+ /// Returns whether [obj] is an instance of [DOBJCObserver].
+ static bool isInstance(objc.ObjCObjectBase obj) {
+ return _objc_msgSend_19nvye5(
+ obj.ref.pointer, _sel_isKindOfClass_, _class_DOBJCObserver);
+ }
+
+ /// alloc
+ static DOBJCObserver alloc() {
+ final _ret = _objc_msgSend_151sglz(_class_DOBJCObserver, _sel_alloc);
+ return DOBJCObserver.castFromPointer(_ret, retain: false, release: true);
+ }
+
+ /// allocWithZone:
+ static DOBJCObserver allocWithZone(ffi.Pointer<NSZone> zone) {
+ final _ret =
+ _objc_msgSend_1cwp428(_class_DOBJCObserver, _sel_allocWithZone_, zone);
+ return DOBJCObserver.castFromPointer(_ret, retain: false, release: true);
+ }
+
+ /// new
+ static DOBJCObserver new$() {
+ final _ret = _objc_msgSend_151sglz(_class_DOBJCObserver, _sel_new);
+ return DOBJCObserver.castFromPointer(_ret, retain: false, release: true);
+ }
+
+ /// autorelease
+ DOBJCObserver autorelease() {
+ final _ret = _objc_msgSend_151sglz(this.ref.pointer, _sel_autorelease);
+ return DOBJCObserver.castFromPointer(_ret, retain: true, release: true);
+ }
+
+ /// dealloc
+ void dealloc() {
+ _objc_msgSend_1pl9qdv(this.ref.pointer, _sel_dealloc);
+ }
+
+ /// init
+ DOBJCObserver init() {
+ objc.checkOsVersionInternal('DOBJCObserver.init',
+ iOS: (false, (2, 0, 0)), macOS: (false, (10, 0, 0)));
+ final _ret =
+ _objc_msgSend_151sglz(this.ref.retainAndReturnPointer(), _sel_init);
+ return DOBJCObserver.castFromPointer(_ret, retain: false, release: true);
+ }
+
+ /// initForKeyPath:ofObject:withBlock:
+ DOBJCObserver initForKeyPath(NSString keyPath,
+ {required objc.ObjCObjectBase ofObject,
+ required DartDOBJCObserverBlock withBlock}) {
+ final _ret = _objc_msgSend_2wiv66(
+ this.ref.retainAndReturnPointer(),
+ _sel_initForKeyPath_ofObject_withBlock_,
+ keyPath.ref.pointer,
+ ofObject.ref.pointer,
+ withBlock.ref.pointer);
+ return DOBJCObserver.castFromPointer(_ret, retain: false, release: true);
+ }
+
+ /// observeValueForKeyPath:ofObject:change:context:
+ void observeValueForKeyPath(NSString keyPath,
+ {required objc.ObjCObjectBase ofObject,
+ required NSDictionary change,
+ required ffi.Pointer<ffi.Void> context}) {
+ _objc_msgSend_1pl4k3n(
+ this.ref.pointer,
+ _sel_observeValueForKeyPath_ofObject_change_context_,
+ keyPath.ref.pointer,
+ ofObject.ref.pointer,
+ change.ref.pointer,
+ context);
+ }
+
+ /// remove
+ void remove() {
+ _objc_msgSend_1pl9qdv(this.ref.pointer, _sel_remove);
+ }
+
+ /// retain
+ DOBJCObserver retain() {
+ final _ret = _objc_msgSend_151sglz(this.ref.pointer, _sel_retain);
+ return DOBJCObserver.castFromPointer(_ret, retain: true, release: true);
+ }
+
+ /// self
+ DOBJCObserver self$1() {
+ final _ret = _objc_msgSend_151sglz(this.ref.pointer, _sel_self);
+ return DOBJCObserver.castFromPointer(_ret, retain: true, release: true);
+ }
+
+ /// Returns a new instance of DOBJCObserver constructed with the default `new` method.
+ factory DOBJCObserver() => new$();
+}
+
+typedef DOBJCObserverBlock = ffi.Pointer<objc.ObjCBlockImpl>;
+typedef DartDOBJCObserverBlock = objc.ObjCBlock<
+ ffi.Void Function(
+ NSObject, ffi.Pointer<objc.ObjCObject>, ffi.Pointer<objc.ObjCObject>)>;
+
/// Helper class to adapt a Dart stream into a `NSInputStream`.
class DartInputStreamAdapter extends NSInputStream implements NSStreamDelegate {
DartInputStreamAdapter._(ffi.Pointer<objc.ObjCObject> pointer,
@@ -724,29 +1112,7 @@
/// NSArray
class NSArray extends NSObject
- with Iterable<objc.ObjCObjectBase>
implements NSCopying, NSMutableCopying, NSSecureCoding, NSFastEnumeration {
- /// Creates a [NSArray] of the given length with [fill] at each position.
- ///
- /// The [length] must be a non-negative integer.
- static NSArray filled(int length, objc.ObjCObjectBase fill) =>
- NSMutableArray.filled(length, fill);
-
- /// Creates a [NSArray] from [elements].
- static NSArray of(Iterable<objc.ObjCObjectBase> elements) =>
- NSMutableArray.of(elements);
-
- @override
- int get length => count;
-
- @override
- objc.ObjCObjectBase elementAt(int index) => objectAtIndex(index);
-
- @override
- Iterator<objc.ObjCObjectBase> get iterator => _NSArrayIterator(this);
-
- objc.ObjCObjectBase operator [](int index) => objectAtIndex(index);
-
NSArray._(ffi.Pointer<objc.ObjCObject> pointer,
{bool retain = false, bool release = false})
: super.castFromPointer(pointer, retain: retain, release: release);
@@ -1448,6 +1814,23 @@
);
}
+/// iOS: introduced 13.0.0
+/// macOS: introduced 10.15.0
+enum NSCollectionChangeType {
+ NSCollectionChangeInsert(0),
+ NSCollectionChangeRemove(1);
+
+ final int value;
+ const NSCollectionChangeType(this.value);
+
+ static NSCollectionChangeType fromValue(int value) => switch (value) {
+ 0 => NSCollectionChangeInsert,
+ 1 => NSCollectionChangeRemove,
+ _ => throw ArgumentError(
+ 'Unknown value for NSCollectionChangeType: $value'),
+ };
+}
+
enum NSComparisonResult {
NSOrderedAscending(-1),
NSOrderedSame(0),
@@ -1771,8 +2154,27 @@
return NSData.castFromPointer(_ret, retain: false, release: true);
}
- /// initWithBytesNoCopy:length:freeWhenDone:
+ /// initWithBytesNoCopy:length:deallocator:
NSData initWithBytesNoCopy$1(ffi.Pointer<ffi.Void> bytes$1,
+ {required int length,
+ objc.ObjCBlock<
+ ffi.Void Function(ffi.Pointer<ffi.Void>, ffi.UnsignedLong)>?
+ deallocator}) {
+ objc.checkOsVersionInternal(
+ 'NSData.initWithBytesNoCopy:length:deallocator:',
+ iOS: (false, (7, 0, 0)),
+ macOS: (false, (10, 9, 0)));
+ final _ret = _objc_msgSend_134vhyh(
+ this.ref.retainAndReturnPointer(),
+ _sel_initWithBytesNoCopy_length_deallocator_,
+ bytes$1,
+ length,
+ deallocator?.ref.pointer ?? ffi.nullptr);
+ return NSData.castFromPointer(_ret, retain: false, release: true);
+ }
+
+ /// initWithBytesNoCopy:length:freeWhenDone:
+ NSData initWithBytesNoCopy$2(ffi.Pointer<ffi.Void> bytes$1,
{required int length, required bool freeWhenDone}) {
final _ret = _objc_msgSend_161ne8y(
this.ref.retainAndReturnPointer(),
@@ -2172,44 +2574,7 @@
/// NSDictionary
class NSDictionary extends NSObject
- with MapBase<NSCopying, objc.ObjCObjectBase>
implements NSCopying, NSMutableCopying, NSSecureCoding, NSFastEnumeration {
- /// Creates a [NSDictionary] from [other].
- static NSDictionary of(Map<NSCopying, objc.ObjCObjectBase> other) =>
- NSMutableDictionary.of(other);
-
- /// Creates a [NSDictionary] from [entries].
- static NSDictionary fromEntries(
- Iterable<MapEntry<NSCopying, objc.ObjCObjectBase>> entries) =>
- NSMutableDictionary.fromEntries(entries);
-
- @override
- int get length => count;
-
- @override
- objc.ObjCObjectBase? operator [](Object? key) =>
- key is NSCopying ? objectForKey(key) : null;
-
- @override
- Iterable<NSCopying> get keys => _NSDictionaryKeyIterable(this);
-
- @override
- Iterable<objc.ObjCObjectBase> get values => _NSDictionaryValueIterable(this);
-
- @override
- bool containsKey(Object? key) => this[key] != null;
-
- @override
- void operator []=(NSCopying key, objc.ObjCObjectBase value) =>
- throw UnsupportedError("Cannot modify NSDictionary");
-
- @override
- void clear() => throw UnsupportedError("Cannot modify NSDictionary");
-
- @override
- objc.ObjCObjectBase? remove(Object? key) =>
- throw UnsupportedError("Cannot modify NSDictionary");
-
NSDictionary._(ffi.Pointer<objc.ObjCObject> pointer,
{bool retain = false, bool release = false})
: super.castFromPointer(pointer, retain: retain, release: release);
@@ -2441,20 +2806,7 @@
}
/// NSEnumerator
-class NSEnumerator extends NSObject
- implements NSFastEnumeration, Iterator<objc.ObjCObjectBase> {
- objc.ObjCObjectBase? _current;
-
- @override
- objc.ObjCObjectBase get current => _current!;
-
- @override
- @pragma('vm:prefer-inline')
- bool moveNext() {
- _current = nextObject();
- return _current != null;
- }
-
+class NSEnumerator extends NSObject implements NSFastEnumeration {
NSEnumerator._(ffi.Pointer<objc.ObjCObject> pointer,
{bool retain = false, bool release = false})
: super.castFromPointer(pointer, retain: retain, release: release);
@@ -2578,11 +2930,48 @@
return NSError.castFromPointer(_ret, retain: false, release: true);
}
+ /// setUserInfoValueProviderForDomain:provider:
+ static void setUserInfoValueProviderForDomain(NSString errorDomain,
+ {objc
+ .ObjCBlock<ffi.Pointer<objc.ObjCObject>? Function(NSError, NSString)>?
+ provider}) {
+ objc.checkOsVersionInternal(
+ 'NSError.setUserInfoValueProviderForDomain:provider:',
+ iOS: (false, (9, 0, 0)),
+ macOS: (false, (10, 11, 0)));
+ _objc_msgSend_o762yo(
+ _class_NSError,
+ _sel_setUserInfoValueProviderForDomain_provider_,
+ errorDomain.ref.pointer,
+ provider?.ref.pointer ?? ffi.nullptr);
+ }
+
/// supportsSecureCoding
static bool getSupportsSecureCoding() {
return _objc_msgSend_91o635(_class_NSError, _sel_supportsSecureCoding);
}
+ /// userInfoValueProviderForDomain:
+ static objc
+ .ObjCBlock<ffi.Pointer<objc.ObjCObject>? Function(NSError, NSString)>?
+ userInfoValueProviderForDomain_(NSError err,
+ {required NSString userInfoKey, required NSString errorDomain}) {
+ objc.checkOsVersionInternal('NSError.userInfoValueProviderForDomain:',
+ iOS: (false, (9, 0, 0)), macOS: (false, (10, 11, 0)));
+ final _ret = _objc_msgSend_cnxxyq(
+ _class_NSError,
+ _sel_userInfoValueProviderForDomain_,
+ err.ref.pointer,
+ userInfoKey.ref.pointer,
+ errorDomain.ref.pointer);
+ return _ret.address == 0
+ ? null
+ : ObjCBlock_objcObjCObject_NSError_NSErrorUserInfoKey.castFromPointer(
+ _ret,
+ retain: true,
+ release: true);
+ }
+
/// code
int get code {
return _objc_msgSend_1hz7y9r(this.ref.pointer, _sel_code);
@@ -2753,6 +3142,54 @@
return NSString.castFromPointer(_ret, retain: true, release: true);
}
+ /// enumerateObjectsAtIndexes:options:usingBlock:
+ void enumerateObjectsAtIndexes(NSIndexSet s,
+ {required NSEnumerationOptions options,
+ required objc.ObjCBlock<
+ ffi.Void Function(ffi.Pointer<objc.ObjCObject>, ffi.UnsignedLong,
+ ffi.Pointer<ffi.Bool>)>
+ usingBlock}) {
+ objc.checkOsVersionInternal(
+ 'NSArray.enumerateObjectsAtIndexes:options:usingBlock:',
+ iOS: (false, (4, 0, 0)),
+ macOS: (false, (10, 6, 0)));
+ _objc_msgSend_a3wp08(
+ this.ref.pointer,
+ _sel_enumerateObjectsAtIndexes_options_usingBlock_,
+ s.ref.pointer,
+ options.value,
+ usingBlock.ref.pointer);
+ }
+
+ /// enumerateObjectsUsingBlock:
+ void enumerateObjectsUsingBlock(
+ objc.ObjCBlock<
+ ffi.Void Function(ffi.Pointer<objc.ObjCObject>, ffi.UnsignedLong,
+ ffi.Pointer<ffi.Bool>)>
+ block) {
+ objc.checkOsVersionInternal('NSArray.enumerateObjectsUsingBlock:',
+ iOS: (false, (4, 0, 0)), macOS: (false, (10, 6, 0)));
+ _objc_msgSend_f167m6(
+ this.ref.pointer, _sel_enumerateObjectsUsingBlock_, block.ref.pointer);
+ }
+
+ /// enumerateObjectsWithOptions:usingBlock:
+ void enumerateObjectsWithOptions(NSEnumerationOptions opts,
+ {required objc.ObjCBlock<
+ ffi.Void Function(ffi.Pointer<objc.ObjCObject>, ffi.UnsignedLong,
+ ffi.Pointer<ffi.Bool>)>
+ usingBlock}) {
+ objc.checkOsVersionInternal(
+ 'NSArray.enumerateObjectsWithOptions:usingBlock:',
+ iOS: (false, (4, 0, 0)),
+ macOS: (false, (10, 6, 0)));
+ _objc_msgSend_yx8yc6(
+ this.ref.pointer,
+ _sel_enumerateObjectsWithOptions_usingBlock_,
+ opts.value,
+ usingBlock.ref.pointer);
+ }
+
/// firstObject
objc.ObjCObjectBase? get firstObject {
objc.checkOsVersionInternal('NSArray.firstObject',
@@ -2792,6 +3229,46 @@
anObject.ref.pointer, inRange);
}
+ /// indexOfObject:inSortedRange:options:usingComparator:
+ int indexOfObject$2(objc.ObjCObjectBase obj,
+ {required NSRange inSortedRange,
+ required NSBinarySearchingOptions options,
+ required objc.ObjCBlock<
+ ffi.Long Function(
+ ffi.Pointer<objc.ObjCObject>, ffi.Pointer<objc.ObjCObject>)>
+ usingComparator}) {
+ objc.checkOsVersionInternal(
+ 'NSArray.indexOfObject:inSortedRange:options:usingComparator:',
+ iOS: (false, (4, 0, 0)),
+ macOS: (false, (10, 6, 0)));
+ return _objc_msgSend_kshx9d(
+ this.ref.pointer,
+ _sel_indexOfObject_inSortedRange_options_usingComparator_,
+ obj.ref.pointer,
+ inSortedRange,
+ options.value,
+ usingComparator.ref.pointer);
+ }
+
+ /// indexOfObjectAtIndexes:options:passingTest:
+ int indexOfObjectAtIndexes(NSIndexSet s,
+ {required NSEnumerationOptions options,
+ required objc.ObjCBlock<
+ ffi.Bool Function(ffi.Pointer<objc.ObjCObject>, ffi.UnsignedLong,
+ ffi.Pointer<ffi.Bool>)>
+ passingTest}) {
+ objc.checkOsVersionInternal(
+ 'NSArray.indexOfObjectAtIndexes:options:passingTest:',
+ iOS: (false, (4, 0, 0)),
+ macOS: (false, (10, 6, 0)));
+ return _objc_msgSend_k1x6mt(
+ this.ref.pointer,
+ _sel_indexOfObjectAtIndexes_options_passingTest_,
+ s.ref.pointer,
+ options.value,
+ passingTest.ref.pointer);
+ }
+
/// indexOfObjectIdenticalTo:
int indexOfObjectIdenticalTo(objc.ObjCObjectBase anObject) {
return _objc_msgSend_1vd1c5m(
@@ -2805,6 +3282,84 @@
_sel_indexOfObjectIdenticalTo_inRange_, anObject.ref.pointer, inRange);
}
+ /// indexOfObjectPassingTest:
+ int indexOfObjectPassingTest(
+ objc.ObjCBlock<
+ ffi.Bool Function(ffi.Pointer<objc.ObjCObject>, ffi.UnsignedLong,
+ ffi.Pointer<ffi.Bool>)>
+ predicate) {
+ objc.checkOsVersionInternal('NSArray.indexOfObjectPassingTest:',
+ iOS: (false, (4, 0, 0)), macOS: (false, (10, 6, 0)));
+ return _objc_msgSend_10mlopr(this.ref.pointer,
+ _sel_indexOfObjectPassingTest_, predicate.ref.pointer);
+ }
+
+ /// indexOfObjectWithOptions:passingTest:
+ int indexOfObjectWithOptions(NSEnumerationOptions opts,
+ {required objc.ObjCBlock<
+ ffi.Bool Function(ffi.Pointer<objc.ObjCObject>, ffi.UnsignedLong,
+ ffi.Pointer<ffi.Bool>)>
+ passingTest}) {
+ objc.checkOsVersionInternal('NSArray.indexOfObjectWithOptions:passingTest:',
+ iOS: (false, (4, 0, 0)), macOS: (false, (10, 6, 0)));
+ return _objc_msgSend_1698hqz(
+ this.ref.pointer,
+ _sel_indexOfObjectWithOptions_passingTest_,
+ opts.value,
+ passingTest.ref.pointer);
+ }
+
+ /// indexesOfObjectsAtIndexes:options:passingTest:
+ NSIndexSet indexesOfObjectsAtIndexes(NSIndexSet s,
+ {required NSEnumerationOptions options,
+ required objc.ObjCBlock<
+ ffi.Bool Function(ffi.Pointer<objc.ObjCObject>, ffi.UnsignedLong,
+ ffi.Pointer<ffi.Bool>)>
+ passingTest}) {
+ objc.checkOsVersionInternal(
+ 'NSArray.indexesOfObjectsAtIndexes:options:passingTest:',
+ iOS: (false, (4, 0, 0)),
+ macOS: (false, (10, 6, 0)));
+ final _ret = _objc_msgSend_1i9v144(
+ this.ref.pointer,
+ _sel_indexesOfObjectsAtIndexes_options_passingTest_,
+ s.ref.pointer,
+ options.value,
+ passingTest.ref.pointer);
+ return NSIndexSet.castFromPointer(_ret, retain: true, release: true);
+ }
+
+ /// indexesOfObjectsPassingTest:
+ NSIndexSet indexesOfObjectsPassingTest(
+ objc.ObjCBlock<
+ ffi.Bool Function(ffi.Pointer<objc.ObjCObject>, ffi.UnsignedLong,
+ ffi.Pointer<ffi.Bool>)>
+ predicate) {
+ objc.checkOsVersionInternal('NSArray.indexesOfObjectsPassingTest:',
+ iOS: (false, (4, 0, 0)), macOS: (false, (10, 6, 0)));
+ final _ret = _objc_msgSend_nnxkei(this.ref.pointer,
+ _sel_indexesOfObjectsPassingTest_, predicate.ref.pointer);
+ return NSIndexSet.castFromPointer(_ret, retain: true, release: true);
+ }
+
+ /// indexesOfObjectsWithOptions:passingTest:
+ NSIndexSet indexesOfObjectsWithOptions(NSEnumerationOptions opts,
+ {required objc.ObjCBlock<
+ ffi.Bool Function(ffi.Pointer<objc.ObjCObject>, ffi.UnsignedLong,
+ ffi.Pointer<ffi.Bool>)>
+ passingTest}) {
+ objc.checkOsVersionInternal(
+ 'NSArray.indexesOfObjectsWithOptions:passingTest:',
+ iOS: (false, (4, 0, 0)),
+ macOS: (false, (10, 6, 0)));
+ final _ret = _objc_msgSend_13x5boi(
+ this.ref.pointer,
+ _sel_indexesOfObjectsWithOptions_passingTest_,
+ opts.value,
+ passingTest.ref.pointer);
+ return NSIndexSet.castFromPointer(_ret, retain: true, release: true);
+ }
+
/// isEqualToArray:
bool isEqualToArray(NSArray otherArray) {
return _objc_msgSend_19nvye5(
@@ -2870,6 +3425,19 @@
return NSData.castFromPointer(_ret, retain: true, release: true);
}
+ /// sortedArrayUsingComparator:
+ NSArray sortedArrayUsingComparator(
+ objc.ObjCBlock<
+ ffi.Long Function(
+ ffi.Pointer<objc.ObjCObject>, ffi.Pointer<objc.ObjCObject>)>
+ cmptr) {
+ objc.checkOsVersionInternal('NSArray.sortedArrayUsingComparator:',
+ iOS: (false, (4, 0, 0)), macOS: (false, (10, 6, 0)));
+ final _ret = _objc_msgSend_nnxkei(
+ this.ref.pointer, _sel_sortedArrayUsingComparator_, cmptr.ref.pointer);
+ return NSArray.castFromPointer(_ret, retain: true, release: true);
+ }
+
/// sortedArrayUsingFunction:context:
NSArray sortedArrayUsingFunction(
ffi.Pointer<
@@ -2908,6 +3476,24 @@
return NSArray.castFromPointer(_ret, retain: true, release: true);
}
+ /// sortedArrayWithOptions:usingComparator:
+ NSArray sortedArrayWithOptions(NSSortOptions opts,
+ {required objc.ObjCBlock<
+ ffi.Long Function(
+ ffi.Pointer<objc.ObjCObject>, ffi.Pointer<objc.ObjCObject>)>
+ usingComparator}) {
+ objc.checkOsVersionInternal(
+ 'NSArray.sortedArrayWithOptions:usingComparator:',
+ iOS: (false, (4, 0, 0)),
+ macOS: (false, (10, 6, 0)));
+ final _ret = _objc_msgSend_1x5ew3h(
+ this.ref.pointer,
+ _sel_sortedArrayWithOptions_usingComparator_,
+ opts.value,
+ usingComparator.ref.pointer);
+ return NSArray.castFromPointer(_ret, retain: true, release: true);
+ }
+
/// subarrayWithRange:
NSArray subarrayWithRange(NSRange range) {
final _ret =
@@ -2933,6 +3519,18 @@
return NSString.castFromPointer(_ret, retain: true, release: true);
}
+ /// enumerateByteRangesUsingBlock:
+ void enumerateByteRangesUsingBlock(
+ objc.ObjCBlock<
+ ffi.Void Function(
+ ffi.Pointer<ffi.Void>, NSRange, ffi.Pointer<ffi.Bool>)>
+ block) {
+ objc.checkOsVersionInternal('NSData.enumerateByteRangesUsingBlock:',
+ iOS: (false, (7, 0, 0)), macOS: (false, (10, 9, 0)));
+ _objc_msgSend_f167m6(this.ref.pointer, _sel_enumerateByteRangesUsingBlock_,
+ block.ref.pointer);
+ }
+
/// getBytes:length:
void getBytes(ffi.Pointer<ffi.Void> buffer, {required int length}) {
_objc_msgSend_zuf90e(
@@ -3145,6 +3743,37 @@
return NSString.castFromPointer(_ret, retain: true, release: true);
}
+ /// enumerateKeysAndObjectsUsingBlock:
+ void enumerateKeysAndObjectsUsingBlock(
+ objc.ObjCBlock<
+ ffi.Void Function(ffi.Pointer<objc.ObjCObject>,
+ ffi.Pointer<objc.ObjCObject>, ffi.Pointer<ffi.Bool>)>
+ block) {
+ objc.checkOsVersionInternal(
+ 'NSDictionary.enumerateKeysAndObjectsUsingBlock:',
+ iOS: (false, (4, 0, 0)),
+ macOS: (false, (10, 6, 0)));
+ _objc_msgSend_f167m6(this.ref.pointer,
+ _sel_enumerateKeysAndObjectsUsingBlock_, block.ref.pointer);
+ }
+
+ /// enumerateKeysAndObjectsWithOptions:usingBlock:
+ void enumerateKeysAndObjectsWithOptions(NSEnumerationOptions opts,
+ {required objc.ObjCBlock<
+ ffi.Void Function(ffi.Pointer<objc.ObjCObject>,
+ ffi.Pointer<objc.ObjCObject>, ffi.Pointer<ffi.Bool>)>
+ usingBlock}) {
+ objc.checkOsVersionInternal(
+ 'NSDictionary.enumerateKeysAndObjectsWithOptions:usingBlock:',
+ iOS: (false, (4, 0, 0)),
+ macOS: (false, (10, 6, 0)));
+ _objc_msgSend_yx8yc6(
+ this.ref.pointer,
+ _sel_enumerateKeysAndObjectsWithOptions_usingBlock_,
+ opts.value,
+ usingBlock.ref.pointer);
+ }
+
/// getObjects:andKeys:count:
void getObjects(ffi.Pointer<ffi.Pointer<objc.ObjCObject>> objects,
{required ffi.Pointer<ffi.Pointer<objc.ObjCObject>> andKeys,
@@ -3161,6 +3790,52 @@
otherDictionary.ref.pointer);
}
+ /// keysOfEntriesPassingTest:
+ NSSet keysOfEntriesPassingTest(
+ objc.ObjCBlock<
+ ffi.Bool Function(ffi.Pointer<objc.ObjCObject>,
+ ffi.Pointer<objc.ObjCObject>, ffi.Pointer<ffi.Bool>)>
+ predicate) {
+ objc.checkOsVersionInternal('NSDictionary.keysOfEntriesPassingTest:',
+ iOS: (false, (4, 0, 0)), macOS: (false, (10, 6, 0)));
+ final _ret = _objc_msgSend_nnxkei(this.ref.pointer,
+ _sel_keysOfEntriesPassingTest_, predicate.ref.pointer);
+ return NSSet.castFromPointer(_ret, retain: true, release: true);
+ }
+
+ /// keysOfEntriesWithOptions:passingTest:
+ NSSet keysOfEntriesWithOptions(NSEnumerationOptions opts,
+ {required objc.ObjCBlock<
+ ffi.Bool Function(ffi.Pointer<objc.ObjCObject>,
+ ffi.Pointer<objc.ObjCObject>, ffi.Pointer<ffi.Bool>)>
+ passingTest}) {
+ objc.checkOsVersionInternal(
+ 'NSDictionary.keysOfEntriesWithOptions:passingTest:',
+ iOS: (false, (4, 0, 0)),
+ macOS: (false, (10, 6, 0)));
+ final _ret = _objc_msgSend_13x5boi(
+ this.ref.pointer,
+ _sel_keysOfEntriesWithOptions_passingTest_,
+ opts.value,
+ passingTest.ref.pointer);
+ return NSSet.castFromPointer(_ret, retain: true, release: true);
+ }
+
+ /// keysSortedByValueUsingComparator:
+ NSArray keysSortedByValueUsingComparator(
+ objc.ObjCBlock<
+ ffi.Long Function(
+ ffi.Pointer<objc.ObjCObject>, ffi.Pointer<objc.ObjCObject>)>
+ cmptr) {
+ objc.checkOsVersionInternal(
+ 'NSDictionary.keysSortedByValueUsingComparator:',
+ iOS: (false, (4, 0, 0)),
+ macOS: (false, (10, 6, 0)));
+ final _ret = _objc_msgSend_nnxkei(this.ref.pointer,
+ _sel_keysSortedByValueUsingComparator_, cmptr.ref.pointer);
+ return NSArray.castFromPointer(_ret, retain: true, release: true);
+ }
+
/// keysSortedByValueUsingSelector:
NSArray keysSortedByValueUsingSelector(
ffi.Pointer<objc.ObjCSelector> comparator) {
@@ -3169,6 +3844,24 @@
return NSArray.castFromPointer(_ret, retain: true, release: true);
}
+ /// keysSortedByValueWithOptions:usingComparator:
+ NSArray keysSortedByValueWithOptions(NSSortOptions opts,
+ {required objc.ObjCBlock<
+ ffi.Long Function(
+ ffi.Pointer<objc.ObjCObject>, ffi.Pointer<objc.ObjCObject>)>
+ usingComparator}) {
+ objc.checkOsVersionInternal(
+ 'NSDictionary.keysSortedByValueWithOptions:usingComparator:',
+ iOS: (false, (4, 0, 0)),
+ macOS: (false, (10, 6, 0)));
+ final _ret = _objc_msgSend_1x5ew3h(
+ this.ref.pointer,
+ _sel_keysSortedByValueWithOptions_usingComparator_,
+ opts.value,
+ usingComparator.ref.pointer);
+ return NSArray.castFromPointer(_ret, retain: true, release: true);
+ }
+
/// objectEnumerator
NSEnumerator objectEnumerator() {
final _ret = _objc_msgSend_151sglz(this.ref.pointer, _sel_objectEnumerator);
@@ -3329,6 +4022,18 @@
obj.ref.pointer, atIndexedSubscript);
}
+ /// sortUsingComparator:
+ void sortUsingComparator(
+ objc.ObjCBlock<
+ ffi.Long Function(
+ ffi.Pointer<objc.ObjCObject>, ffi.Pointer<objc.ObjCObject>)>
+ cmptr) {
+ objc.checkOsVersionInternal('NSMutableArray.sortUsingComparator:',
+ iOS: (false, (4, 0, 0)), macOS: (false, (10, 6, 0)));
+ _objc_msgSend_f167m6(
+ this.ref.pointer, _sel_sortUsingComparator_, cmptr.ref.pointer);
+ }
+
/// sortUsingFunction:context:
void sortUsingFunction(
ffi.Pointer<
@@ -3346,6 +4051,23 @@
_objc_msgSend_1d9e4oe(
this.ref.pointer, _sel_sortUsingSelector_, comparator);
}
+
+ /// sortWithOptions:usingComparator:
+ void sortWithOptions(NSSortOptions opts,
+ {required objc.ObjCBlock<
+ ffi.Long Function(
+ ffi.Pointer<objc.ObjCObject>, ffi.Pointer<objc.ObjCObject>)>
+ usingComparator}) {
+ objc.checkOsVersionInternal(
+ 'NSMutableArray.sortWithOptions:usingComparator:',
+ iOS: (false, (4, 0, 0)),
+ macOS: (false, (10, 6, 0)));
+ _objc_msgSend_jjgvjt(
+ this.ref.pointer,
+ _sel_sortWithOptions_usingComparator_,
+ opts.value,
+ usingComparator.ref.pointer);
+ }
}
/// NSExtendedMutableData
@@ -3600,6 +4322,54 @@
obj.ref.pointer, atIndexedSubscript);
}
+ /// sortRange:options:usingComparator:
+ void sortRange(NSRange range,
+ {required NSSortOptions options,
+ required objc.ObjCBlock<
+ ffi.Long Function(
+ ffi.Pointer<objc.ObjCObject>, ffi.Pointer<objc.ObjCObject>)>
+ usingComparator}) {
+ objc.checkOsVersionInternal(
+ 'NSMutableOrderedSet.sortRange:options:usingComparator:',
+ iOS: (false, (5, 0, 0)),
+ macOS: (false, (10, 7, 0)));
+ _objc_msgSend_arew0j(
+ this.ref.pointer,
+ _sel_sortRange_options_usingComparator_,
+ range,
+ options.value,
+ usingComparator.ref.pointer);
+ }
+
+ /// sortUsingComparator:
+ void sortUsingComparator(
+ objc.ObjCBlock<
+ ffi.Long Function(
+ ffi.Pointer<objc.ObjCObject>, ffi.Pointer<objc.ObjCObject>)>
+ cmptr) {
+ objc.checkOsVersionInternal('NSMutableOrderedSet.sortUsingComparator:',
+ iOS: (false, (5, 0, 0)), macOS: (false, (10, 7, 0)));
+ _objc_msgSend_f167m6(
+ this.ref.pointer, _sel_sortUsingComparator_, cmptr.ref.pointer);
+ }
+
+ /// sortWithOptions:usingComparator:
+ void sortWithOptions(NSSortOptions opts,
+ {required objc.ObjCBlock<
+ ffi.Long Function(
+ ffi.Pointer<objc.ObjCObject>, ffi.Pointer<objc.ObjCObject>)>
+ usingComparator}) {
+ objc.checkOsVersionInternal(
+ 'NSMutableOrderedSet.sortWithOptions:usingComparator:',
+ iOS: (false, (5, 0, 0)),
+ macOS: (false, (10, 7, 0)));
+ _objc_msgSend_jjgvjt(
+ this.ref.pointer,
+ _sel_sortWithOptions_usingComparator_,
+ opts.value,
+ usingComparator.ref.pointer);
+ }
+
/// unionOrderedSet:
void unionOrderedSet(NSOrderedSet other) {
objc.checkOsVersionInternal('NSMutableOrderedSet.unionOrderedSet:',
@@ -3701,6 +4471,54 @@
return NSString.castFromPointer(_ret, retain: true, release: true);
}
+ /// enumerateObjectsAtIndexes:options:usingBlock:
+ void enumerateObjectsAtIndexes(NSIndexSet s,
+ {required NSEnumerationOptions options,
+ required objc.ObjCBlock<
+ ffi.Void Function(ffi.Pointer<objc.ObjCObject>, ffi.UnsignedLong,
+ ffi.Pointer<ffi.Bool>)>
+ usingBlock}) {
+ objc.checkOsVersionInternal(
+ 'NSOrderedSet.enumerateObjectsAtIndexes:options:usingBlock:',
+ iOS: (false, (5, 0, 0)),
+ macOS: (false, (10, 7, 0)));
+ _objc_msgSend_a3wp08(
+ this.ref.pointer,
+ _sel_enumerateObjectsAtIndexes_options_usingBlock_,
+ s.ref.pointer,
+ options.value,
+ usingBlock.ref.pointer);
+ }
+
+ /// enumerateObjectsUsingBlock:
+ void enumerateObjectsUsingBlock(
+ objc.ObjCBlock<
+ ffi.Void Function(ffi.Pointer<objc.ObjCObject>, ffi.UnsignedLong,
+ ffi.Pointer<ffi.Bool>)>
+ block) {
+ objc.checkOsVersionInternal('NSOrderedSet.enumerateObjectsUsingBlock:',
+ iOS: (false, (5, 0, 0)), macOS: (false, (10, 7, 0)));
+ _objc_msgSend_f167m6(
+ this.ref.pointer, _sel_enumerateObjectsUsingBlock_, block.ref.pointer);
+ }
+
+ /// enumerateObjectsWithOptions:usingBlock:
+ void enumerateObjectsWithOptions(NSEnumerationOptions opts,
+ {required objc.ObjCBlock<
+ ffi.Void Function(ffi.Pointer<objc.ObjCObject>, ffi.UnsignedLong,
+ ffi.Pointer<ffi.Bool>)>
+ usingBlock}) {
+ objc.checkOsVersionInternal(
+ 'NSOrderedSet.enumerateObjectsWithOptions:usingBlock:',
+ iOS: (false, (5, 0, 0)),
+ macOS: (false, (10, 7, 0)));
+ _objc_msgSend_yx8yc6(
+ this.ref.pointer,
+ _sel_enumerateObjectsWithOptions_usingBlock_,
+ opts.value,
+ usingBlock.ref.pointer);
+ }
+
/// firstObject
objc.ObjCObjectBase? get firstObject {
objc.checkOsVersionInternal('NSOrderedSet.firstObject',
@@ -3718,6 +4536,126 @@
this.ref.pointer, _sel_getObjects_range_, objects, range);
}
+ /// indexOfObject:inSortedRange:options:usingComparator:
+ int indexOfObject(objc.ObjCObjectBase object,
+ {required NSRange inSortedRange,
+ required NSBinarySearchingOptions options,
+ required objc.ObjCBlock<
+ ffi.Long Function(
+ ffi.Pointer<objc.ObjCObject>, ffi.Pointer<objc.ObjCObject>)>
+ usingComparator}) {
+ objc.checkOsVersionInternal(
+ 'NSOrderedSet.indexOfObject:inSortedRange:options:usingComparator:',
+ iOS: (false, (5, 0, 0)),
+ macOS: (false, (10, 7, 0)));
+ return _objc_msgSend_kshx9d(
+ this.ref.pointer,
+ _sel_indexOfObject_inSortedRange_options_usingComparator_,
+ object.ref.pointer,
+ inSortedRange,
+ options.value,
+ usingComparator.ref.pointer);
+ }
+
+ /// indexOfObjectAtIndexes:options:passingTest:
+ int indexOfObjectAtIndexes(NSIndexSet s,
+ {required NSEnumerationOptions options,
+ required objc.ObjCBlock<
+ ffi.Bool Function(ffi.Pointer<objc.ObjCObject>, ffi.UnsignedLong,
+ ffi.Pointer<ffi.Bool>)>
+ passingTest}) {
+ objc.checkOsVersionInternal(
+ 'NSOrderedSet.indexOfObjectAtIndexes:options:passingTest:',
+ iOS: (false, (5, 0, 0)),
+ macOS: (false, (10, 7, 0)));
+ return _objc_msgSend_k1x6mt(
+ this.ref.pointer,
+ _sel_indexOfObjectAtIndexes_options_passingTest_,
+ s.ref.pointer,
+ options.value,
+ passingTest.ref.pointer);
+ }
+
+ /// indexOfObjectPassingTest:
+ int indexOfObjectPassingTest(
+ objc.ObjCBlock<
+ ffi.Bool Function(ffi.Pointer<objc.ObjCObject>, ffi.UnsignedLong,
+ ffi.Pointer<ffi.Bool>)>
+ predicate) {
+ objc.checkOsVersionInternal('NSOrderedSet.indexOfObjectPassingTest:',
+ iOS: (false, (5, 0, 0)), macOS: (false, (10, 7, 0)));
+ return _objc_msgSend_10mlopr(this.ref.pointer,
+ _sel_indexOfObjectPassingTest_, predicate.ref.pointer);
+ }
+
+ /// indexOfObjectWithOptions:passingTest:
+ int indexOfObjectWithOptions(NSEnumerationOptions opts,
+ {required objc.ObjCBlock<
+ ffi.Bool Function(ffi.Pointer<objc.ObjCObject>, ffi.UnsignedLong,
+ ffi.Pointer<ffi.Bool>)>
+ passingTest}) {
+ objc.checkOsVersionInternal(
+ 'NSOrderedSet.indexOfObjectWithOptions:passingTest:',
+ iOS: (false, (5, 0, 0)),
+ macOS: (false, (10, 7, 0)));
+ return _objc_msgSend_1698hqz(
+ this.ref.pointer,
+ _sel_indexOfObjectWithOptions_passingTest_,
+ opts.value,
+ passingTest.ref.pointer);
+ }
+
+ /// indexesOfObjectsAtIndexes:options:passingTest:
+ NSIndexSet indexesOfObjectsAtIndexes(NSIndexSet s,
+ {required NSEnumerationOptions options,
+ required objc.ObjCBlock<
+ ffi.Bool Function(ffi.Pointer<objc.ObjCObject>, ffi.UnsignedLong,
+ ffi.Pointer<ffi.Bool>)>
+ passingTest}) {
+ objc.checkOsVersionInternal(
+ 'NSOrderedSet.indexesOfObjectsAtIndexes:options:passingTest:',
+ iOS: (false, (5, 0, 0)),
+ macOS: (false, (10, 7, 0)));
+ final _ret = _objc_msgSend_1i9v144(
+ this.ref.pointer,
+ _sel_indexesOfObjectsAtIndexes_options_passingTest_,
+ s.ref.pointer,
+ options.value,
+ passingTest.ref.pointer);
+ return NSIndexSet.castFromPointer(_ret, retain: true, release: true);
+ }
+
+ /// indexesOfObjectsPassingTest:
+ NSIndexSet indexesOfObjectsPassingTest(
+ objc.ObjCBlock<
+ ffi.Bool Function(ffi.Pointer<objc.ObjCObject>, ffi.UnsignedLong,
+ ffi.Pointer<ffi.Bool>)>
+ predicate) {
+ objc.checkOsVersionInternal('NSOrderedSet.indexesOfObjectsPassingTest:',
+ iOS: (false, (5, 0, 0)), macOS: (false, (10, 7, 0)));
+ final _ret = _objc_msgSend_nnxkei(this.ref.pointer,
+ _sel_indexesOfObjectsPassingTest_, predicate.ref.pointer);
+ return NSIndexSet.castFromPointer(_ret, retain: true, release: true);
+ }
+
+ /// indexesOfObjectsWithOptions:passingTest:
+ NSIndexSet indexesOfObjectsWithOptions(NSEnumerationOptions opts,
+ {required objc.ObjCBlock<
+ ffi.Bool Function(ffi.Pointer<objc.ObjCObject>, ffi.UnsignedLong,
+ ffi.Pointer<ffi.Bool>)>
+ passingTest}) {
+ objc.checkOsVersionInternal(
+ 'NSOrderedSet.indexesOfObjectsWithOptions:passingTest:',
+ iOS: (false, (5, 0, 0)),
+ macOS: (false, (10, 7, 0)));
+ final _ret = _objc_msgSend_13x5boi(
+ this.ref.pointer,
+ _sel_indexesOfObjectsWithOptions_passingTest_,
+ opts.value,
+ passingTest.ref.pointer);
+ return NSIndexSet.castFromPointer(_ret, retain: true, release: true);
+ }
+
/// intersectsOrderedSet:
bool intersectsOrderedSet(NSOrderedSet other) {
objc.checkOsVersionInternal('NSOrderedSet.intersectsOrderedSet:',
@@ -3819,6 +4757,37 @@
final _ret = _objc_msgSend_151sglz(this.ref.pointer, _sel_set);
return NSSet.castFromPointer(_ret, retain: true, release: true);
}
+
+ /// sortedArrayUsingComparator:
+ NSArray sortedArrayUsingComparator(
+ objc.ObjCBlock<
+ ffi.Long Function(
+ ffi.Pointer<objc.ObjCObject>, ffi.Pointer<objc.ObjCObject>)>
+ cmptr) {
+ objc.checkOsVersionInternal('NSOrderedSet.sortedArrayUsingComparator:',
+ iOS: (false, (5, 0, 0)), macOS: (false, (10, 7, 0)));
+ final _ret = _objc_msgSend_nnxkei(
+ this.ref.pointer, _sel_sortedArrayUsingComparator_, cmptr.ref.pointer);
+ return NSArray.castFromPointer(_ret, retain: true, release: true);
+ }
+
+ /// sortedArrayWithOptions:usingComparator:
+ NSArray sortedArrayWithOptions(NSSortOptions opts,
+ {required objc.ObjCBlock<
+ ffi.Long Function(
+ ffi.Pointer<objc.ObjCObject>, ffi.Pointer<objc.ObjCObject>)>
+ usingComparator}) {
+ objc.checkOsVersionInternal(
+ 'NSOrderedSet.sortedArrayWithOptions:usingComparator:',
+ iOS: (false, (5, 0, 0)),
+ macOS: (false, (10, 7, 0)));
+ final _ret = _objc_msgSend_1x5ew3h(
+ this.ref.pointer,
+ _sel_sortedArrayWithOptions_usingComparator_,
+ opts.value,
+ usingComparator.ref.pointer);
+ return NSArray.castFromPointer(_ret, retain: true, release: true);
+ }
}
/// NSExtendedSet
@@ -3856,6 +4825,33 @@
return NSString.castFromPointer(_ret, retain: true, release: true);
}
+ /// enumerateObjectsUsingBlock:
+ void enumerateObjectsUsingBlock(
+ objc.ObjCBlock<
+ ffi.Void Function(
+ ffi.Pointer<objc.ObjCObject>, ffi.Pointer<ffi.Bool>)>
+ block) {
+ objc.checkOsVersionInternal('NSSet.enumerateObjectsUsingBlock:',
+ iOS: (false, (4, 0, 0)), macOS: (false, (10, 6, 0)));
+ _objc_msgSend_f167m6(
+ this.ref.pointer, _sel_enumerateObjectsUsingBlock_, block.ref.pointer);
+ }
+
+ /// enumerateObjectsWithOptions:usingBlock:
+ void enumerateObjectsWithOptions(NSEnumerationOptions opts,
+ {required objc.ObjCBlock<
+ ffi.Void Function(
+ ffi.Pointer<objc.ObjCObject>, ffi.Pointer<ffi.Bool>)>
+ usingBlock}) {
+ objc.checkOsVersionInternal('NSSet.enumerateObjectsWithOptions:usingBlock:',
+ iOS: (false, (4, 0, 0)), macOS: (false, (10, 6, 0)));
+ _objc_msgSend_yx8yc6(
+ this.ref.pointer,
+ _sel_enumerateObjectsWithOptions_usingBlock_,
+ opts.value,
+ usingBlock.ref.pointer);
+ }
+
/// intersectsSet:
bool intersectsSet(NSSet otherSet) {
return _objc_msgSend_19nvye5(
@@ -3890,6 +4886,35 @@
withObject?.ref.pointer ?? ffi.nullptr);
}
+ /// objectsPassingTest:
+ NSSet objectsPassingTest(
+ objc.ObjCBlock<
+ ffi.Bool Function(
+ ffi.Pointer<objc.ObjCObject>, ffi.Pointer<ffi.Bool>)>
+ predicate) {
+ objc.checkOsVersionInternal('NSSet.objectsPassingTest:',
+ iOS: (false, (4, 0, 0)), macOS: (false, (10, 6, 0)));
+ final _ret = _objc_msgSend_nnxkei(
+ this.ref.pointer, _sel_objectsPassingTest_, predicate.ref.pointer);
+ return NSSet.castFromPointer(_ret, retain: true, release: true);
+ }
+
+ /// objectsWithOptions:passingTest:
+ NSSet objectsWithOptions(NSEnumerationOptions opts,
+ {required objc.ObjCBlock<
+ ffi.Bool Function(
+ ffi.Pointer<objc.ObjCObject>, ffi.Pointer<ffi.Bool>)>
+ passingTest}) {
+ objc.checkOsVersionInternal('NSSet.objectsWithOptions:passingTest:',
+ iOS: (false, (4, 0, 0)), macOS: (false, (10, 6, 0)));
+ final _ret = _objc_msgSend_13x5boi(
+ this.ref.pointer,
+ _sel_objectsWithOptions_passingTest_,
+ opts.value,
+ passingTest.ref.pointer);
+ return NSSet.castFromPointer(_ret, retain: true, release: true);
+ }
+
/// setByAddingObject:
NSSet setByAddingObject(objc.ObjCObjectBase anObject) {
objc.checkOsVersionInternal('NSSet.setByAddingObject:',
@@ -4124,6 +5149,92 @@
this.ref.pointer, _sel_encodeWithCoder_, coder.ref.pointer);
}
+ /// enumerateIndexesInRange:options:usingBlock:
+ void enumerateIndexesInRange(NSRange range,
+ {required NSEnumerationOptions options,
+ required objc
+ .ObjCBlock<ffi.Void Function(ffi.UnsignedLong, ffi.Pointer<ffi.Bool>)>
+ usingBlock}) {
+ objc.checkOsVersionInternal(
+ 'NSIndexSet.enumerateIndexesInRange:options:usingBlock:',
+ iOS: (false, (4, 0, 0)),
+ macOS: (false, (10, 6, 0)));
+ _objc_msgSend_177cajs(
+ this.ref.pointer,
+ _sel_enumerateIndexesInRange_options_usingBlock_,
+ range,
+ options.value,
+ usingBlock.ref.pointer);
+ }
+
+ /// enumerateIndexesUsingBlock:
+ void enumerateIndexesUsingBlock(
+ objc.ObjCBlock<ffi.Void Function(ffi.UnsignedLong, ffi.Pointer<ffi.Bool>)>
+ block) {
+ objc.checkOsVersionInternal('NSIndexSet.enumerateIndexesUsingBlock:',
+ iOS: (false, (4, 0, 0)), macOS: (false, (10, 6, 0)));
+ _objc_msgSend_f167m6(
+ this.ref.pointer, _sel_enumerateIndexesUsingBlock_, block.ref.pointer);
+ }
+
+ /// enumerateIndexesWithOptions:usingBlock:
+ void enumerateIndexesWithOptions(NSEnumerationOptions opts,
+ {required objc
+ .ObjCBlock<ffi.Void Function(ffi.UnsignedLong, ffi.Pointer<ffi.Bool>)>
+ usingBlock}) {
+ objc.checkOsVersionInternal(
+ 'NSIndexSet.enumerateIndexesWithOptions:usingBlock:',
+ iOS: (false, (4, 0, 0)),
+ macOS: (false, (10, 6, 0)));
+ _objc_msgSend_yx8yc6(
+ this.ref.pointer,
+ _sel_enumerateIndexesWithOptions_usingBlock_,
+ opts.value,
+ usingBlock.ref.pointer);
+ }
+
+ /// enumerateRangesInRange:options:usingBlock:
+ void enumerateRangesInRange(NSRange range,
+ {required NSEnumerationOptions options,
+ required objc.ObjCBlock<ffi.Void Function(NSRange, ffi.Pointer<ffi.Bool>)>
+ usingBlock}) {
+ objc.checkOsVersionInternal(
+ 'NSIndexSet.enumerateRangesInRange:options:usingBlock:',
+ iOS: (false, (5, 0, 0)),
+ macOS: (false, (10, 7, 0)));
+ _objc_msgSend_177cajs(
+ this.ref.pointer,
+ _sel_enumerateRangesInRange_options_usingBlock_,
+ range,
+ options.value,
+ usingBlock.ref.pointer);
+ }
+
+ /// enumerateRangesUsingBlock:
+ void enumerateRangesUsingBlock(
+ objc.ObjCBlock<ffi.Void Function(NSRange, ffi.Pointer<ffi.Bool>)> block) {
+ objc.checkOsVersionInternal('NSIndexSet.enumerateRangesUsingBlock:',
+ iOS: (false, (5, 0, 0)), macOS: (false, (10, 7, 0)));
+ _objc_msgSend_f167m6(
+ this.ref.pointer, _sel_enumerateRangesUsingBlock_, block.ref.pointer);
+ }
+
+ /// enumerateRangesWithOptions:usingBlock:
+ void enumerateRangesWithOptions(NSEnumerationOptions opts,
+ {required objc
+ .ObjCBlock<ffi.Void Function(NSRange, ffi.Pointer<ffi.Bool>)>
+ usingBlock}) {
+ objc.checkOsVersionInternal(
+ 'NSIndexSet.enumerateRangesWithOptions:usingBlock:',
+ iOS: (false, (5, 0, 0)),
+ macOS: (false, (10, 7, 0)));
+ _objc_msgSend_yx8yc6(
+ this.ref.pointer,
+ _sel_enumerateRangesWithOptions_usingBlock_,
+ opts.value,
+ usingBlock.ref.pointer);
+ }
+
/// firstIndex
int get firstIndex {
return _objc_msgSend_xw2lbc(this.ref.pointer, _sel_firstIndex);
@@ -4152,6 +5263,22 @@
this.ref.pointer, _sel_indexGreaterThanOrEqualToIndex_, value);
}
+ /// indexInRange:options:passingTest:
+ int indexInRange(NSRange range,
+ {required NSEnumerationOptions options,
+ required objc
+ .ObjCBlock<ffi.Bool Function(ffi.UnsignedLong, ffi.Pointer<ffi.Bool>)>
+ passingTest}) {
+ objc.checkOsVersionInternal('NSIndexSet.indexInRange:options:passingTest:',
+ iOS: (false, (4, 0, 0)), macOS: (false, (10, 6, 0)));
+ return _objc_msgSend_6jmuyz(
+ this.ref.pointer,
+ _sel_indexInRange_options_passingTest_,
+ range,
+ options.value,
+ passingTest.ref.pointer);
+ }
+
/// indexLessThanIndex:
int indexLessThanIndex(int value) {
return _objc_msgSend_12py2ux(
@@ -4164,6 +5291,75 @@
this.ref.pointer, _sel_indexLessThanOrEqualToIndex_, value);
}
+ /// indexPassingTest:
+ int indexPassingTest(
+ objc.ObjCBlock<ffi.Bool Function(ffi.UnsignedLong, ffi.Pointer<ffi.Bool>)>
+ predicate) {
+ objc.checkOsVersionInternal('NSIndexSet.indexPassingTest:',
+ iOS: (false, (4, 0, 0)), macOS: (false, (10, 6, 0)));
+ return _objc_msgSend_10mlopr(
+ this.ref.pointer, _sel_indexPassingTest_, predicate.ref.pointer);
+ }
+
+ /// indexWithOptions:passingTest:
+ int indexWithOptions(NSEnumerationOptions opts,
+ {required objc
+ .ObjCBlock<ffi.Bool Function(ffi.UnsignedLong, ffi.Pointer<ffi.Bool>)>
+ passingTest}) {
+ objc.checkOsVersionInternal('NSIndexSet.indexWithOptions:passingTest:',
+ iOS: (false, (4, 0, 0)), macOS: (false, (10, 6, 0)));
+ return _objc_msgSend_1698hqz(
+ this.ref.pointer,
+ _sel_indexWithOptions_passingTest_,
+ opts.value,
+ passingTest.ref.pointer);
+ }
+
+ /// indexesInRange:options:passingTest:
+ NSIndexSet indexesInRange(NSRange range,
+ {required NSEnumerationOptions options,
+ required objc
+ .ObjCBlock<ffi.Bool Function(ffi.UnsignedLong, ffi.Pointer<ffi.Bool>)>
+ passingTest}) {
+ objc.checkOsVersionInternal(
+ 'NSIndexSet.indexesInRange:options:passingTest:',
+ iOS: (false, (4, 0, 0)),
+ macOS: (false, (10, 6, 0)));
+ final _ret = _objc_msgSend_1q30cs4(
+ this.ref.pointer,
+ _sel_indexesInRange_options_passingTest_,
+ range,
+ options.value,
+ passingTest.ref.pointer);
+ return NSIndexSet.castFromPointer(_ret, retain: true, release: true);
+ }
+
+ /// indexesPassingTest:
+ NSIndexSet indexesPassingTest(
+ objc.ObjCBlock<ffi.Bool Function(ffi.UnsignedLong, ffi.Pointer<ffi.Bool>)>
+ predicate) {
+ objc.checkOsVersionInternal('NSIndexSet.indexesPassingTest:',
+ iOS: (false, (4, 0, 0)), macOS: (false, (10, 6, 0)));
+ final _ret = _objc_msgSend_nnxkei(
+ this.ref.pointer, _sel_indexesPassingTest_, predicate.ref.pointer);
+ return NSIndexSet.castFromPointer(_ret, retain: true, release: true);
+ }
+
+ /// indexesWithOptions:passingTest:
+ NSIndexSet indexesWithOptions(NSEnumerationOptions opts,
+ {required objc
+ .ObjCBlock<ffi.Bool Function(ffi.UnsignedLong, ffi.Pointer<ffi.Bool>)>
+ passingTest}) {
+ objc.checkOsVersionInternal('NSIndexSet.indexesWithOptions:passingTest:',
+ iOS: (false, (4, 0, 0)), macOS: (false, (10, 6, 0)));
+ final _ret = _objc_msgSend_13x5boi(
+ this.ref.pointer,
+ _sel_indexesWithOptions_passingTest_,
+ opts.value,
+ passingTest.ref.pointer);
+ return NSIndexSet.castFromPointer(_ret, retain: true, release: true);
+ }
+
/// init
NSIndexSet init() {
objc.checkOsVersionInternal('NSIndexSet.init',
@@ -4584,6 +5780,55 @@
return NSItemProvider.castFromPointer(_ret, retain: false, release: true);
}
+ /// loadDataRepresentationForTypeIdentifier:completionHandler:
+ NSProgress loadDataRepresentationForTypeIdentifier(NSString typeIdentifier,
+ {required objc.ObjCBlock<ffi.Void Function(NSData?, NSError?)>
+ completionHandler}) {
+ objc.checkOsVersionInternal(
+ 'NSItemProvider.loadDataRepresentationForTypeIdentifier:completionHandler:',
+ iOS: (false, (11, 0, 0)),
+ macOS: (false, (10, 13, 0)));
+ final _ret = _objc_msgSend_r0bo0s(
+ this.ref.pointer,
+ _sel_loadDataRepresentationForTypeIdentifier_completionHandler_,
+ typeIdentifier.ref.pointer,
+ completionHandler.ref.pointer);
+ return NSProgress.castFromPointer(_ret, retain: true, release: true);
+ }
+
+ /// loadFileRepresentationForTypeIdentifier:completionHandler:
+ NSProgress loadFileRepresentationForTypeIdentifier(NSString typeIdentifier,
+ {required objc.ObjCBlock<ffi.Void Function(NSURL?, NSError?)>
+ completionHandler}) {
+ objc.checkOsVersionInternal(
+ 'NSItemProvider.loadFileRepresentationForTypeIdentifier:completionHandler:',
+ iOS: (false, (11, 0, 0)),
+ macOS: (false, (10, 13, 0)));
+ final _ret = _objc_msgSend_r0bo0s(
+ this.ref.pointer,
+ _sel_loadFileRepresentationForTypeIdentifier_completionHandler_,
+ typeIdentifier.ref.pointer,
+ completionHandler.ref.pointer);
+ return NSProgress.castFromPointer(_ret, retain: true, release: true);
+ }
+
+ /// loadInPlaceFileRepresentationForTypeIdentifier:completionHandler:
+ NSProgress loadInPlaceFileRepresentationForTypeIdentifier(
+ NSString typeIdentifier,
+ {required objc.ObjCBlock<ffi.Void Function(NSURL?, ffi.Bool, NSError?)>
+ completionHandler}) {
+ objc.checkOsVersionInternal(
+ 'NSItemProvider.loadInPlaceFileRepresentationForTypeIdentifier:completionHandler:',
+ iOS: (false, (11, 0, 0)),
+ macOS: (false, (10, 13, 0)));
+ final _ret = _objc_msgSend_r0bo0s(
+ this.ref.pointer,
+ _sel_loadInPlaceFileRepresentationForTypeIdentifier_completionHandler_,
+ typeIdentifier.ref.pointer,
+ completionHandler.ref.pointer);
+ return NSProgress.castFromPointer(_ret, retain: true, release: true);
+ }
+
/// loadItemForTypeIdentifier:options:completionHandler:
void loadItemForTypeIdentifier(NSString typeIdentifier,
{NSDictionary? options,
@@ -4601,6 +5846,85 @@
completionHandler?.ref.pointer ?? ffi.nullptr);
}
+ /// loadObjectOfClass:completionHandler:
+ NSProgress loadObjectOfClass(NSItemProviderReading aClass,
+ {required objc
+ .ObjCBlock<ffi.Void Function(ffi.Pointer<objc.ObjCObject>?, NSError?)>
+ completionHandler}) {
+ objc.checkOsVersionInternal(
+ 'NSItemProvider.loadObjectOfClass:completionHandler:',
+ iOS: (false, (11, 0, 0)),
+ macOS: (false, (10, 13, 0)));
+ final _ret = _objc_msgSend_r0bo0s(
+ this.ref.pointer,
+ _sel_loadObjectOfClass_completionHandler_,
+ aClass.ref.pointer,
+ completionHandler.ref.pointer);
+ return NSProgress.castFromPointer(_ret, retain: true, release: true);
+ }
+
+ /// registerDataRepresentationForTypeIdentifier:visibility:loadHandler:
+ void registerDataRepresentationForTypeIdentifier(NSString typeIdentifier,
+ {required NSItemProviderRepresentationVisibility visibility,
+ required objc.ObjCBlock<
+ NSProgress? Function(
+ objc.ObjCBlock<ffi.Void Function(NSData?, NSError?)>)>
+ loadHandler}) {
+ objc.checkOsVersionInternal(
+ 'NSItemProvider.registerDataRepresentationForTypeIdentifier:visibility:loadHandler:',
+ iOS: (false, (11, 0, 0)),
+ macOS: (false, (10, 13, 0)));
+ _objc_msgSend_1pl40xc(
+ this.ref.pointer,
+ _sel_registerDataRepresentationForTypeIdentifier_visibility_loadHandler_,
+ typeIdentifier.ref.pointer,
+ visibility.value,
+ loadHandler.ref.pointer);
+ }
+
+ /// registerFileRepresentationForTypeIdentifier:fileOptions:visibility:loadHandler:
+ void registerFileRepresentationForTypeIdentifier(NSString typeIdentifier,
+ {required NSItemProviderFileOptions fileOptions,
+ required NSItemProviderRepresentationVisibility visibility,
+ required objc.ObjCBlock<
+ NSProgress? Function(
+ objc.ObjCBlock<
+ ffi.Void Function(NSURL?, ffi.Bool, NSError?)>)>
+ loadHandler}) {
+ objc.checkOsVersionInternal(
+ 'NSItemProvider.registerFileRepresentationForTypeIdentifier:fileOptions:visibility:loadHandler:',
+ iOS: (false, (11, 0, 0)),
+ macOS: (false, (10, 13, 0)));
+ _objc_msgSend_t7arir(
+ this.ref.pointer,
+ _sel_registerFileRepresentationForTypeIdentifier_fileOptions_visibility_loadHandler_,
+ typeIdentifier.ref.pointer,
+ fileOptions.value,
+ visibility.value,
+ loadHandler.ref.pointer);
+ }
+
+ /// registerItemForTypeIdentifier:loadHandler:
+ void registerItemForTypeIdentifier(NSString typeIdentifier,
+ {required objc.ObjCBlock<
+ ffi.Void Function(
+ objc.ObjCBlock<
+ ffi.Void Function(
+ ffi.Pointer<objc.ObjCObject>?, NSError)>,
+ ffi.Pointer<objc.ObjCObject>,
+ NSDictionary)>
+ loadHandler}) {
+ objc.checkOsVersionInternal(
+ 'NSItemProvider.registerItemForTypeIdentifier:loadHandler:',
+ iOS: (false, (8, 0, 0)),
+ macOS: (false, (10, 10, 0)));
+ _objc_msgSend_o762yo(
+ this.ref.pointer,
+ _sel_registerItemForTypeIdentifier_loadHandler_,
+ typeIdentifier.ref.pointer,
+ loadHandler.ref.pointer);
+ }
+
/// registerObject:visibility:
void registerObject(NSItemProviderWriting object,
{required NSItemProviderRepresentationVisibility visibility}) {
@@ -4610,6 +5934,27 @@
object.ref.pointer, visibility.value);
}
+ /// registerObjectOfClass:visibility:loadHandler:
+ void registerObjectOfClass(NSItemProviderWriting aClass,
+ {required NSItemProviderRepresentationVisibility visibility,
+ required objc.ObjCBlock<
+ NSProgress? Function(
+ objc.ObjCBlock<
+ ffi.Void Function(
+ ffi.Pointer<objc.ObjCObject>?, NSError?)>)>
+ loadHandler}) {
+ objc.checkOsVersionInternal(
+ 'NSItemProvider.registerObjectOfClass:visibility:loadHandler:',
+ iOS: (false, (11, 0, 0)),
+ macOS: (false, (10, 13, 0)));
+ _objc_msgSend_1pl40xc(
+ this.ref.pointer,
+ _sel_registerObjectOfClass_visibility_loadHandler_,
+ aClass.ref.pointer,
+ visibility.value,
+ loadHandler.ref.pointer);
+ }
+
/// registeredTypeIdentifiers
NSArray get registeredTypeIdentifiers {
objc.checkOsVersionInternal('NSItemProvider.registeredTypeIdentifiers',
@@ -4782,6 +6127,9 @@
static NSItemProviderWriting implement(
{NSItemProviderRepresentationVisibility Function(NSString)?
itemProviderVisibilityForRepresentationWithTypeIdentifier_,
+ required NSProgress? Function(
+ NSString, objc.ObjCBlock<ffi.Void Function(NSData?, NSError?)>)
+ loadDataWithTypeIdentifier_forItemProviderCompletionHandler_,
NSArray Function()? writableTypeIdentifiersForItemProvider,
bool $keepIsolateAlive = true}) {
final builder =
@@ -4790,6 +6138,10 @@
.itemProviderVisibilityForRepresentationWithTypeIdentifier_
.implement(builder,
itemProviderVisibilityForRepresentationWithTypeIdentifier_);
+ NSItemProviderWriting
+ .loadDataWithTypeIdentifier_forItemProviderCompletionHandler_
+ .implement(builder,
+ loadDataWithTypeIdentifier_forItemProviderCompletionHandler_);
NSItemProviderWriting.writableTypeIdentifiersForItemProvider
.implement(builder, writableTypeIdentifiersForItemProvider);
builder.addProtocol($protocol);
@@ -4804,12 +6156,19 @@
static void addToBuilder(objc.ObjCProtocolBuilder builder,
{NSItemProviderRepresentationVisibility Function(NSString)?
itemProviderVisibilityForRepresentationWithTypeIdentifier_,
+ required NSProgress? Function(
+ NSString, objc.ObjCBlock<ffi.Void Function(NSData?, NSError?)>)
+ loadDataWithTypeIdentifier_forItemProviderCompletionHandler_,
NSArray Function()? writableTypeIdentifiersForItemProvider,
bool $keepIsolateAlive = true}) {
NSItemProviderWriting
.itemProviderVisibilityForRepresentationWithTypeIdentifier_
.implement(builder,
itemProviderVisibilityForRepresentationWithTypeIdentifier_);
+ NSItemProviderWriting
+ .loadDataWithTypeIdentifier_forItemProviderCompletionHandler_
+ .implement(builder,
+ loadDataWithTypeIdentifier_forItemProviderCompletionHandler_);
NSItemProviderWriting.writableTypeIdentifiersForItemProvider
.implement(builder, writableTypeIdentifiersForItemProvider);
builder.addProtocol($protocol);
@@ -4839,6 +6198,39 @@
(ffi.Pointer<ffi.Void> _, NSString arg1) => func(arg1)),
);
+ /// loadDataWithTypeIdentifier:forItemProviderCompletionHandler:
+ static final loadDataWithTypeIdentifier_forItemProviderCompletionHandler_ =
+ objc.ObjCProtocolMethod<
+ NSProgress? Function(
+ NSString, objc.ObjCBlock<ffi.Void Function(NSData?, NSError?)>)>(
+ _protocol_NSItemProviderWriting,
+ _sel_loadDataWithTypeIdentifier_forItemProviderCompletionHandler_,
+ ffi.Native.addressOf<
+ ffi.NativeFunction<
+ ffi.Pointer<objc.ObjCObject> Function(
+ ffi.Pointer<objc.ObjCObject>,
+ ffi.Pointer<ffi.Void>,
+ ffi.Pointer<objc.ObjCObject>,
+ ffi.Pointer<objc.ObjCBlockImpl>)>>(
+ _ObjectiveCBindings_protocolTrampoline_1q0i84)
+ .cast(),
+ objc.getProtocolMethodSignature(
+ _protocol_NSItemProviderWriting,
+ _sel_loadDataWithTypeIdentifier_forItemProviderCompletionHandler_,
+ isRequired: true,
+ isInstanceMethod: true,
+ ),
+ (NSProgress? Function(
+ NSString, objc.ObjCBlock<ffi.Void Function(NSData?, NSError?)>)
+ func) =>
+ ObjCBlock_NSProgress_ffiVoid_NSString_ffiVoidNSDataNSError.fromFunction(
+ (ffi.Pointer<ffi.Void> _,
+ NSString arg1,
+ objc.ObjCBlock<ffi.Void Function(NSData?, NSError?)>
+ arg2) =>
+ func(arg1, arg2)),
+ );
+
/// writableTypeIdentifiersForItemProvider
static final writableTypeIdentifiersForItemProvider =
objc.ObjCProtocolMethod<NSArray Function()>(
@@ -5186,41 +6578,7 @@
}
/// NSMutableArray
-class NSMutableArray extends NSArray with ListBase<objc.ObjCObjectBase> {
- /// Creates a [NSMutableArray] of the given length with [fill] at each
- /// position.
- ///
- /// The [length] must be a non-negative integer.
- static NSMutableArray filled(int length, objc.ObjCObjectBase fill) {
- final a = arrayWithCapacity(length);
- for (var i = 0; i < length; ++i) a.add(fill);
- return a;
- }
-
- /// Creates a [NSMutableArray] from [elements].
- static NSMutableArray of(Iterable<objc.ObjCObjectBase> elements) =>
- arrayWithCapacity(elements.length)..addAll(elements);
-
- @override
- set length(int newLength) {
- var len = length;
- RangeError.checkValueInInterval(newLength, 0, len);
- for (; len > newLength; --len) removeLastObject();
- }
-
- @override
- Iterator<objc.ObjCObjectBase> get iterator => _NSArrayIterator(this);
-
- @override
- objc.ObjCObjectBase operator [](int index) => objectAtIndex(index);
-
- @override
- void operator []=(int index, objc.ObjCObjectBase value) =>
- replaceObjectAtIndex(index, withObject: value);
-
- @override
- void add(objc.ObjCObjectBase value) => addObject(value);
-
+class NSMutableArray extends NSArray {
NSMutableArray._(ffi.Pointer<objc.ObjCObject> pointer,
{bool retain = false, bool release = false})
: super.castFromPointer(pointer, retain: retain, release: release);
@@ -5724,8 +7082,27 @@
return NSMutableData.castFromPointer(_ret, retain: false, release: true);
}
- /// initWithBytesNoCopy:length:freeWhenDone:
+ /// initWithBytesNoCopy:length:deallocator:
NSMutableData initWithBytesNoCopy$1(ffi.Pointer<ffi.Void> bytes$1,
+ {required int length,
+ objc.ObjCBlock<
+ ffi.Void Function(ffi.Pointer<ffi.Void>, ffi.UnsignedLong)>?
+ deallocator}) {
+ objc.checkOsVersionInternal(
+ 'NSMutableData.initWithBytesNoCopy:length:deallocator:',
+ iOS: (false, (7, 0, 0)),
+ macOS: (false, (10, 9, 0)));
+ final _ret = _objc_msgSend_134vhyh(
+ this.ref.retainAndReturnPointer(),
+ _sel_initWithBytesNoCopy_length_deallocator_,
+ bytes$1,
+ length,
+ deallocator?.ref.pointer ?? ffi.nullptr);
+ return NSMutableData.castFromPointer(_ret, retain: false, release: true);
+ }
+
+ /// initWithBytesNoCopy:length:freeWhenDone:
+ NSMutableData initWithBytesNoCopy$2(ffi.Pointer<ffi.Void> bytes$1,
{required int length, required bool freeWhenDone}) {
final _ret = _objc_msgSend_161ne8y(
this.ref.retainAndReturnPointer(),
@@ -5839,31 +7216,6 @@
/// NSMutableDictionary
class NSMutableDictionary extends NSDictionary {
- /// Creates a [NSMutableDictionary] from [other].
- static NSDictionary of(Map<NSCopying, objc.ObjCObjectBase> other) =>
- NSMutableDictionary.dictionaryWithCapacity(other.length)..addAll(other);
-
- /// Creates a [NSMutableDictionary] from [entries].
- static NSMutableDictionary fromEntries(
- Iterable<MapEntry<NSCopying, objc.ObjCObjectBase>> entries) =>
- NSMutableDictionary.dictionaryWithCapacity(entries.length)
- ..addEntries(entries);
-
- @override
- void clear() => removeAllObjects();
-
- @override
- objc.ObjCObjectBase? remove(Object? key) {
- if (key is! NSCopying) return null;
- final old = this[key];
- removeObjectForKey(key);
- return old;
- }
-
- @override
- void operator []=(NSCopying key, objc.ObjCObjectBase value) =>
- setObject(value, forKey: NSCopying.castFrom(key));
-
NSMutableDictionary._(ffi.Pointer<objc.ObjCObject> pointer,
{bool retain = false, bool release = false})
: super.castFromPointer(pointer, retain: retain, release: release);
@@ -6608,28 +7960,6 @@
/// NSMutableSet
class NSMutableSet extends NSSet {
- /// Creates a [NSMutableSet] from [elements].
- static NSMutableSet of(Iterable<objc.ObjCObjectBase> elements) =>
- setWithCapacity(elements.length)..addAll(elements);
-
- @override
- bool add(objc.ObjCObjectBase value) {
- final alreadyContains = contains(value);
- addObject(value);
- return !alreadyContains;
- }
-
- @override
- bool remove(Object? value) {
- if (value is! objc.ObjCObjectBase) return false;
- final alreadyContains = contains(value);
- removeObject(value);
- return alreadyContains;
- }
-
- @override
- void clear() => removeAllObjects();
-
NSMutableSet._(ffi.Pointer<objc.ObjCObject> pointer,
{bool retain = false, bool release = false})
: super.castFromPointer(pointer, retain: retain, release: release);
@@ -7044,10 +8374,29 @@
: NSMutableString.castFromPointer(_ret, retain: false, release: true);
}
- /// initWithBytesNoCopy:length:encoding:freeWhenDone:
+ /// initWithBytesNoCopy:length:encoding:deallocator:
NSMutableString? initWithBytesNoCopy(ffi.Pointer<ffi.Void> bytes,
{required int length,
required int encoding,
+ objc.ObjCBlock<
+ ffi.Void Function(ffi.Pointer<ffi.Void>, ffi.UnsignedLong)>?
+ deallocator}) {
+ final _ret = _objc_msgSend_1lbgrac(
+ this.ref.retainAndReturnPointer(),
+ _sel_initWithBytesNoCopy_length_encoding_deallocator_,
+ bytes,
+ length,
+ encoding,
+ deallocator?.ref.pointer ?? ffi.nullptr);
+ return _ret.address == 0
+ ? null
+ : NSMutableString.castFromPointer(_ret, retain: false, release: true);
+ }
+
+ /// initWithBytesNoCopy:length:encoding:freeWhenDone:
+ NSMutableString? initWithBytesNoCopy$1(ffi.Pointer<ffi.Void> bytes,
+ {required int length,
+ required int encoding,
required bool freeWhenDone}) {
final _ret = _objc_msgSend_k4j8m3(
this.ref.retainAndReturnPointer(),
@@ -7079,8 +8428,24 @@
return NSMutableString.castFromPointer(_ret, retain: false, release: true);
}
+ /// initWithCharactersNoCopy:length:deallocator:
+ NSMutableString initWithCharactersNoCopy(ffi.Pointer<ffi.UnsignedShort> chars,
+ {required int length,
+ objc.ObjCBlock<
+ ffi.Void Function(
+ ffi.Pointer<ffi.UnsignedShort>, ffi.UnsignedLong)>?
+ deallocator}) {
+ final _ret = _objc_msgSend_talwei(
+ this.ref.retainAndReturnPointer(),
+ _sel_initWithCharactersNoCopy_length_deallocator_,
+ chars,
+ length,
+ deallocator?.ref.pointer ?? ffi.nullptr);
+ return NSMutableString.castFromPointer(_ret, retain: false, release: true);
+ }
+
/// initWithCharactersNoCopy:length:freeWhenDone:
- NSMutableString initWithCharactersNoCopy(
+ NSMutableString initWithCharactersNoCopy$1(
ffi.Pointer<ffi.UnsignedShort> characters,
{required int length,
required bool freeWhenDone}) {
@@ -9088,6 +10453,31 @@
);
}
+/// WARNING: NSOrderedCollectionChange is a stub. To generate bindings for this class, include
+/// NSOrderedCollectionChange in your config's objc-interfaces list.
+///
+/// NSOrderedCollectionChange
+///
+/// iOS: introduced 13.0.0
+/// macOS: introduced 10.15.0
+class NSOrderedCollectionChange extends NSObject {
+ NSOrderedCollectionChange._(ffi.Pointer<objc.ObjCObject> pointer,
+ {bool retain = false, bool release = false})
+ : super.castFromPointer(pointer, retain: retain, release: release) {
+ objc.checkOsVersionInternal('NSOrderedCollectionChange',
+ iOS: (false, (13, 0, 0)), macOS: (false, (10, 15, 0)));
+ }
+
+ /// Constructs a [NSOrderedCollectionChange] that points to the same underlying object as [other].
+ NSOrderedCollectionChange.castFrom(objc.ObjCObjectBase other)
+ : this._(other.ref.pointer, retain: true, release: true);
+
+ /// Constructs a [NSOrderedCollectionChange] that wraps the given raw object pointer.
+ NSOrderedCollectionChange.castFromPointer(ffi.Pointer<objc.ObjCObject> other,
+ {bool retain = false, bool release = false})
+ : this._(other, retain: retain, release: release);
+}
+
/// NSOrderedCollectionDifference
///
/// iOS: introduced 13.0.0
@@ -9154,6 +10544,24 @@
count$1);
}
+ /// differenceByTransformingChangesWithBlock:
+ ///
+ /// iOS: introduced 13.0.0
+ /// macOS: introduced 10.15.0
+ NSOrderedCollectionDifference differenceByTransformingChangesWithBlock(
+ objc.ObjCBlock<
+ NSOrderedCollectionChange Function(NSOrderedCollectionChange)>
+ block) {
+ objc.checkOsVersionInternal(
+ 'NSOrderedCollectionDifference.differenceByTransformingChangesWithBlock:',
+ iOS: (false, (13, 0, 0)),
+ macOS: (false, (10, 15, 0)));
+ final _ret = _objc_msgSend_nnxkei(this.ref.pointer,
+ _sel_differenceByTransformingChangesWithBlock_, block.ref.pointer);
+ return NSOrderedCollectionDifference.castFromPointer(_ret,
+ retain: true, release: true);
+ }
+
/// iOS: introduced 13.0.0
/// macOS: introduced 10.15.0
bool get hasChanges {
@@ -10153,6 +11561,25 @@
factory NSPortMessage() => new$();
}
+/// WARNING: NSProgress is a stub. To generate bindings for this class, include
+/// NSProgress in your config's objc-interfaces list.
+///
+/// NSProgress
+class NSProgress extends NSObject {
+ NSProgress._(ffi.Pointer<objc.ObjCObject> pointer,
+ {bool retain = false, bool release = false})
+ : super.castFromPointer(pointer, retain: retain, release: release);
+
+ /// Constructs a [NSProgress] that points to the same underlying object as [other].
+ NSProgress.castFrom(objc.ObjCObjectBase other)
+ : this._(other.ref.pointer, retain: true, release: true);
+
+ /// Constructs a [NSProgress] that wraps the given raw object pointer.
+ NSProgress.castFromPointer(ffi.Pointer<objc.ObjCObject> other,
+ {bool retain = false, bool release = false})
+ : this._(other, retain: retain, release: release);
+}
+
enum NSPropertyListFormat {
NSPropertyListOpenStepFormat(1),
NSPropertyListXMLFormat_v1_0(100),
@@ -10505,39 +11932,7 @@
/// NSSet
class NSSet extends NSObject
- with SetBase<objc.ObjCObjectBase>
implements NSCopying, NSMutableCopying, NSSecureCoding, NSFastEnumeration {
- /// Creates a [NSSet] from [elements].
- static NSSet of(Iterable<objc.ObjCObjectBase> elements) =>
- NSMutableSet.of(elements);
-
- @override
- int get length => count;
-
- @override
- bool contains(Object? element) =>
- element is objc.ObjCObjectBase ? containsObject(element) : false;
-
- @override
- objc.ObjCObjectBase? lookup(Object? element) =>
- element is objc.ObjCObjectBase ? member(element) : null;
-
- @override
- Iterator<objc.ObjCObjectBase> get iterator => objectEnumerator();
-
- @override
- Set<objc.ObjCObjectBase> toSet() => {...this};
-
- @override
- bool add(objc.ObjCObjectBase value) =>
- throw UnsupportedError("Cannot modify NSSet");
-
- @override
- bool remove(Object? value) => throw UnsupportedError("Cannot modify NSSet");
-
- @override
- void clear() => throw UnsupportedError("Cannot modify NSSet");
-
NSSet._(ffi.Pointer<objc.ObjCObject> pointer,
{bool retain = false, bool release = false})
: super.castFromPointer(pointer, retain: retain, release: release);
@@ -11069,13 +12464,6 @@
/// NSString
class NSString extends NSObject
implements NSCopying, NSMutableCopying, NSSecureCoding {
- factory NSString(String str) {
- final cstr = str.toNativeUtf16();
- final nsstr = stringWithCharacters(cstr.cast(), length: str.length);
- pkg_ffi.calloc.free(cstr);
- return nsstr;
- }
-
NSString._(ffi.Pointer<objc.ObjCObject> pointer,
{bool retain = false, bool release = false})
: super.castFromPointer(pointer, retain: retain, release: release);
@@ -11329,10 +12717,29 @@
: NSString.castFromPointer(_ret, retain: false, release: true);
}
- /// initWithBytesNoCopy:length:encoding:freeWhenDone:
+ /// initWithBytesNoCopy:length:encoding:deallocator:
NSString? initWithBytesNoCopy(ffi.Pointer<ffi.Void> bytes,
{required int length,
required int encoding,
+ objc.ObjCBlock<
+ ffi.Void Function(ffi.Pointer<ffi.Void>, ffi.UnsignedLong)>?
+ deallocator}) {
+ final _ret = _objc_msgSend_1lbgrac(
+ this.ref.retainAndReturnPointer(),
+ _sel_initWithBytesNoCopy_length_encoding_deallocator_,
+ bytes,
+ length,
+ encoding,
+ deallocator?.ref.pointer ?? ffi.nullptr);
+ return _ret.address == 0
+ ? null
+ : NSString.castFromPointer(_ret, retain: false, release: true);
+ }
+
+ /// initWithBytesNoCopy:length:encoding:freeWhenDone:
+ NSString? initWithBytesNoCopy$1(ffi.Pointer<ffi.Void> bytes,
+ {required int length,
+ required int encoding,
required bool freeWhenDone}) {
final _ret = _objc_msgSend_k4j8m3(
this.ref.retainAndReturnPointer(),
@@ -11364,8 +12771,24 @@
return NSString.castFromPointer(_ret, retain: false, release: true);
}
+ /// initWithCharactersNoCopy:length:deallocator:
+ NSString initWithCharactersNoCopy(ffi.Pointer<ffi.UnsignedShort> chars,
+ {required int length,
+ objc.ObjCBlock<
+ ffi.Void Function(
+ ffi.Pointer<ffi.UnsignedShort>, ffi.UnsignedLong)>?
+ deallocator}) {
+ final _ret = _objc_msgSend_talwei(
+ this.ref.retainAndReturnPointer(),
+ _sel_initWithCharactersNoCopy_length_deallocator_,
+ chars,
+ length,
+ deallocator?.ref.pointer ?? ffi.nullptr);
+ return NSString.castFromPointer(_ret, retain: false, release: true);
+ }
+
/// initWithCharactersNoCopy:length:freeWhenDone:
- NSString initWithCharactersNoCopy(ffi.Pointer<ffi.UnsignedShort> characters,
+ NSString initWithCharactersNoCopy$1(ffi.Pointer<ffi.UnsignedShort> characters,
{required int length, required bool freeWhenDone}) {
final _ret = _objc_msgSend_lh0jh5(
this.ref.retainAndReturnPointer(),
@@ -11815,6 +13238,35 @@
: _objc_msgSend_1ukqyt8(this.ref.pointer, _sel_doubleValue);
}
+ /// enumerateLinesUsingBlock:
+ void enumerateLinesUsingBlock(
+ objc.ObjCBlock<ffi.Void Function(NSString, ffi.Pointer<ffi.Bool>)>
+ block) {
+ objc.checkOsVersionInternal('NSString.enumerateLinesUsingBlock:',
+ iOS: (false, (4, 0, 0)), macOS: (false, (10, 6, 0)));
+ _objc_msgSend_f167m6(
+ this.ref.pointer, _sel_enumerateLinesUsingBlock_, block.ref.pointer);
+ }
+
+ /// enumerateSubstringsInRange:options:usingBlock:
+ void enumerateSubstringsInRange(NSRange range,
+ {required NSStringEnumerationOptions options,
+ required objc.ObjCBlock<
+ ffi.Void Function(
+ NSString?, NSRange, NSRange, ffi.Pointer<ffi.Bool>)>
+ usingBlock}) {
+ objc.checkOsVersionInternal(
+ 'NSString.enumerateSubstringsInRange:options:usingBlock:',
+ iOS: (false, (4, 0, 0)),
+ macOS: (false, (10, 6, 0)));
+ _objc_msgSend_14ew8zr(
+ this.ref.pointer,
+ _sel_enumerateSubstringsInRange_options_usingBlock_,
+ range,
+ options.value,
+ usingBlock.ref.pointer);
+ }
+
/// fastestEncoding
int get fastestEncoding {
return _objc_msgSend_xw2lbc(this.ref.pointer, _sel_fastestEncoding);
@@ -12498,8 +13950,25 @@
return NSTimer.castFromPointer(_ret, retain: true, release: true);
}
+ /// scheduledTimerWithTimeInterval:repeats:block:
+ static NSTimer scheduledTimerWithTimeInterval$1(double interval,
+ {required bool repeats,
+ required objc.ObjCBlock<ffi.Void Function(NSTimer)> block}) {
+ objc.checkOsVersionInternal(
+ 'NSTimer.scheduledTimerWithTimeInterval:repeats:block:',
+ iOS: (false, (10, 0, 0)),
+ macOS: (false, (10, 12, 0)));
+ final _ret = _objc_msgSend_9a64f1(
+ _class_NSTimer,
+ _sel_scheduledTimerWithTimeInterval_repeats_block_,
+ interval,
+ repeats,
+ block.ref.pointer);
+ return NSTimer.castFromPointer(_ret, retain: true, release: true);
+ }
+
/// scheduledTimerWithTimeInterval:target:selector:userInfo:repeats:
- static NSTimer scheduledTimerWithTimeInterval$1(double ti,
+ static NSTimer scheduledTimerWithTimeInterval$2(double ti,
{required objc.ObjCObjectBase target,
required ffi.Pointer<objc.ObjCSelector> selector,
objc.ObjCObjectBase? userInfo,
@@ -12527,8 +13996,23 @@
return NSTimer.castFromPointer(_ret, retain: true, release: true);
}
+ /// timerWithTimeInterval:repeats:block:
+ static NSTimer timerWithTimeInterval$1(double interval,
+ {required bool repeats,
+ required objc.ObjCBlock<ffi.Void Function(NSTimer)> block}) {
+ objc.checkOsVersionInternal('NSTimer.timerWithTimeInterval:repeats:block:',
+ iOS: (false, (10, 0, 0)), macOS: (false, (10, 12, 0)));
+ final _ret = _objc_msgSend_9a64f1(
+ _class_NSTimer,
+ _sel_timerWithTimeInterval_repeats_block_,
+ interval,
+ repeats,
+ block.ref.pointer);
+ return NSTimer.castFromPointer(_ret, retain: true, release: true);
+ }
+
/// timerWithTimeInterval:target:selector:userInfo:repeats:
- static NSTimer timerWithTimeInterval$1(double ti,
+ static NSTimer timerWithTimeInterval$2(double ti,
{required objc.ObjCObjectBase target,
required ffi.Pointer<objc.ObjCSelector> selector,
objc.ObjCObjectBase? userInfo,
@@ -12570,9 +14054,28 @@
return NSTimer.castFromPointer(_ret, retain: false, release: true);
}
- /// initWithFireDate:interval:target:selector:userInfo:repeats:
+ /// initWithFireDate:interval:repeats:block:
NSTimer initWithFireDate(NSDate date,
{required double interval,
+ required bool repeats,
+ required objc.ObjCBlock<ffi.Void Function(NSTimer)> block}) {
+ objc.checkOsVersionInternal(
+ 'NSTimer.initWithFireDate:interval:repeats:block:',
+ iOS: (false, (10, 0, 0)),
+ macOS: (false, (10, 12, 0)));
+ final _ret = _objc_msgSend_1s0rfm3(
+ this.ref.retainAndReturnPointer(),
+ _sel_initWithFireDate_interval_repeats_block_,
+ date.ref.pointer,
+ interval,
+ repeats,
+ block.ref.pointer);
+ return NSTimer.castFromPointer(_ret, retain: false, release: true);
+ }
+
+ /// initWithFireDate:interval:target:selector:userInfo:repeats:
+ NSTimer initWithFireDate$1(NSDate date,
+ {required double interval,
required objc.ObjCObjectBase target,
required ffi.Pointer<objc.ObjCSelector> selector,
objc.ObjCObjectBase? userInfo,
@@ -13736,6 +15239,119 @@
release: true);
}
+int _ObjCBlock_NSComparisonResult_objcObjCObject_objcObjCObject_fnPtrTrampoline(
+ ffi.Pointer<objc.ObjCBlockImpl> block,
+ ffi.Pointer<objc.ObjCObject> arg0,
+ ffi.Pointer<objc.ObjCObject> arg1) =>
+ block.ref.target
+ .cast<
+ ffi.NativeFunction<
+ ffi.Long Function(ffi.Pointer<objc.ObjCObject> arg0,
+ ffi.Pointer<objc.ObjCObject> arg1)>>()
+ .asFunction<
+ int Function(ffi.Pointer<objc.ObjCObject>,
+ ffi.Pointer<objc.ObjCObject>)>()(arg0, arg1);
+ffi.Pointer<ffi.Void>
+ _ObjCBlock_NSComparisonResult_objcObjCObject_objcObjCObject_fnPtrCallable =
+ ffi.Pointer.fromFunction<
+ ffi.Long Function(
+ ffi.Pointer<objc.ObjCBlockImpl>,
+ ffi.Pointer<objc.ObjCObject>,
+ ffi.Pointer<objc.ObjCObject>)>(
+ _ObjCBlock_NSComparisonResult_objcObjCObject_objcObjCObject_fnPtrTrampoline,
+ 0)
+ .cast();
+int _ObjCBlock_NSComparisonResult_objcObjCObject_objcObjCObject_closureTrampoline(
+ ffi.Pointer<objc.ObjCBlockImpl> block,
+ ffi.Pointer<objc.ObjCObject> arg0,
+ ffi.Pointer<objc.ObjCObject> arg1) =>
+ (objc.getBlockClosure(block) as int Function(ffi.Pointer<objc.ObjCObject>,
+ ffi.Pointer<objc.ObjCObject>))(arg0, arg1);
+ffi.Pointer<ffi.Void>
+ _ObjCBlock_NSComparisonResult_objcObjCObject_objcObjCObject_closureCallable =
+ ffi.Pointer.fromFunction<
+ ffi.Long Function(
+ ffi.Pointer<objc.ObjCBlockImpl>,
+ ffi.Pointer<objc.ObjCObject>,
+ ffi.Pointer<objc.ObjCObject>)>(
+ _ObjCBlock_NSComparisonResult_objcObjCObject_objcObjCObject_closureTrampoline,
+ 0)
+ .cast();
+
+/// Construction methods for `objc.ObjCBlock<ffi.Long Function(ffi.Pointer<objc.ObjCObject>, ffi.Pointer<objc.ObjCObject>)>`.
+abstract final class ObjCBlock_NSComparisonResult_objcObjCObject_objcObjCObject {
+ /// Returns a block that wraps the given raw block pointer.
+ static objc.ObjCBlock<
+ ffi.Long Function(
+ ffi.Pointer<objc.ObjCObject>, ffi.Pointer<objc.ObjCObject>)>
+ castFromPointer(ffi.Pointer<objc.ObjCBlockImpl> pointer,
+ {bool retain = false, bool release = false}) =>
+ objc.ObjCBlock<
+ ffi.Long Function(ffi.Pointer<objc.ObjCObject>,
+ ffi.Pointer<objc.ObjCObject>)>(pointer,
+ retain: retain, release: release);
+
+ /// Creates a block from a C function pointer.
+ ///
+ /// This block must be invoked by native code running on the same thread as
+ /// the isolate that registered it. Invoking the block on the wrong thread
+ /// will result in a crash.
+ static objc
+ .ObjCBlock<ffi.Long Function(ffi.Pointer<objc.ObjCObject>, ffi.Pointer<objc.ObjCObject>)>
+ fromFunctionPointer(ffi.Pointer<ffi.NativeFunction<ffi.Long Function(ffi.Pointer<objc.ObjCObject> arg0, ffi.Pointer<objc.ObjCObject> arg1)>> ptr) =>
+ objc.ObjCBlock<
+ ffi.Long Function(ffi.Pointer<objc.ObjCObject>,
+ ffi.Pointer<objc.ObjCObject>)>(
+ objc.newPointerBlock(
+ _ObjCBlock_NSComparisonResult_objcObjCObject_objcObjCObject_fnPtrCallable,
+ ptr.cast()),
+ retain: false,
+ release: true);
+
+ /// Creates a block from a Dart function.
+ ///
+ /// This block must be invoked by native code running on the same thread as
+ /// the isolate that registered it. Invoking the block on the wrong thread
+ /// will result in a crash.
+ ///
+ /// If `keepIsolateAlive` is true, this block will keep this isolate alive
+ /// until it is garbage collected by both Dart and ObjC.
+ static objc
+ .ObjCBlock<ffi.Long Function(ffi.Pointer<objc.ObjCObject>, ffi.Pointer<objc.ObjCObject>)>
+ fromFunction(NSComparisonResult Function(objc.ObjCObjectBase, objc.ObjCObjectBase) fn,
+ {bool keepIsolateAlive = true}) =>
+ objc.ObjCBlock<ffi.Long Function(ffi.Pointer<objc.ObjCObject>, ffi.Pointer<objc.ObjCObject>)>(
+ objc.newClosureBlock(
+ _ObjCBlock_NSComparisonResult_objcObjCObject_objcObjCObject_closureCallable,
+ (ffi.Pointer<objc.ObjCObject> arg0,
+ ffi.Pointer<objc.ObjCObject> arg1) =>
+ fn(objc.ObjCObjectBase(arg0, retain: true, release: true), objc.ObjCObjectBase(arg1, retain: true, release: true)).value,
+ keepIsolateAlive),
+ retain: false,
+ release: true);
+}
+
+/// Call operator for `objc.ObjCBlock<ffi.Long Function(ffi.Pointer<objc.ObjCObject>, ffi.Pointer<objc.ObjCObject>)>`.
+extension ObjCBlock_NSComparisonResult_objcObjCObject_objcObjCObject_CallExtension
+ on objc.ObjCBlock<
+ ffi.Long Function(
+ ffi.Pointer<objc.ObjCObject>, ffi.Pointer<objc.ObjCObject>)> {
+ NSComparisonResult call(objc.ObjCObjectBase arg0, objc.ObjCObjectBase arg1) =>
+ NSComparisonResult.fromValue(ref.pointer.ref.invoke
+ .cast<
+ ffi.NativeFunction<
+ ffi.Long Function(
+ ffi.Pointer<objc.ObjCBlockImpl> block,
+ ffi.Pointer<objc.ObjCObject> arg0,
+ ffi.Pointer<objc.ObjCObject> arg1)>>()
+ .asFunction<
+ int Function(
+ ffi.Pointer<objc.ObjCBlockImpl>,
+ ffi.Pointer<objc.ObjCObject>,
+ ffi.Pointer<objc.ObjCObject>)>()(
+ ref.pointer, arg0.ref.pointer, arg1.ref.pointer));
+}
+
int _ObjCBlock_NSItemProviderRepresentationVisibility_ffiVoid_NSString_fnPtrTrampoline(
ffi.Pointer<objc.ObjCBlockImpl> block,
ffi.Pointer<ffi.Void> arg0,
@@ -13840,6 +15456,712 @@
ref.pointer, arg0, arg1.ref.pointer));
}
+ffi.Pointer<objc.ObjCObject>
+ _ObjCBlock_NSOrderedCollectionChange_NSOrderedCollectionChange_fnPtrTrampoline(
+ ffi.Pointer<objc.ObjCBlockImpl> block,
+ ffi.Pointer<objc.ObjCObject> arg0) =>
+ block.ref.target
+ .cast<
+ ffi.NativeFunction<
+ ffi.Pointer<objc.ObjCObject> Function(
+ ffi.Pointer<objc.ObjCObject> arg0)>>()
+ .asFunction<
+ ffi.Pointer<objc.ObjCObject> Function(
+ ffi.Pointer<objc.ObjCObject>)>()(arg0);
+ffi.Pointer<ffi.Void>
+ _ObjCBlock_NSOrderedCollectionChange_NSOrderedCollectionChange_fnPtrCallable =
+ ffi.Pointer.fromFunction<
+ ffi.Pointer<objc.ObjCObject> Function(
+ ffi.Pointer<objc.ObjCBlockImpl>,
+ ffi.Pointer<objc.ObjCObject>)>(
+ _ObjCBlock_NSOrderedCollectionChange_NSOrderedCollectionChange_fnPtrTrampoline)
+ .cast();
+ffi.Pointer<objc.ObjCObject>
+ _ObjCBlock_NSOrderedCollectionChange_NSOrderedCollectionChange_closureTrampoline(
+ ffi.Pointer<objc.ObjCBlockImpl> block,
+ ffi.Pointer<objc.ObjCObject> arg0) =>
+ (objc.getBlockClosure(block) as ffi.Pointer<objc.ObjCObject> Function(
+ ffi.Pointer<objc.ObjCObject>))(arg0);
+ffi.Pointer<ffi.Void>
+ _ObjCBlock_NSOrderedCollectionChange_NSOrderedCollectionChange_closureCallable =
+ ffi.Pointer.fromFunction<
+ ffi.Pointer<objc.ObjCObject> Function(
+ ffi.Pointer<objc.ObjCBlockImpl>,
+ ffi.Pointer<objc.ObjCObject>)>(
+ _ObjCBlock_NSOrderedCollectionChange_NSOrderedCollectionChange_closureTrampoline)
+ .cast();
+
+/// Construction methods for `objc.ObjCBlock<NSOrderedCollectionChange Function(NSOrderedCollectionChange)>`.
+abstract final class ObjCBlock_NSOrderedCollectionChange_NSOrderedCollectionChange {
+ /// Returns a block that wraps the given raw block pointer.
+ static objc
+ .ObjCBlock<NSOrderedCollectionChange Function(NSOrderedCollectionChange)>
+ castFromPointer(ffi.Pointer<objc.ObjCBlockImpl> pointer,
+ {bool retain = false, bool release = false}) =>
+ objc.ObjCBlock<
+ NSOrderedCollectionChange Function(
+ NSOrderedCollectionChange)>(pointer,
+ retain: retain, release: release);
+
+ /// Creates a block from a C function pointer.
+ ///
+ /// This block must be invoked by native code running on the same thread as
+ /// the isolate that registered it. Invoking the block on the wrong thread
+ /// will result in a crash.
+ static objc.ObjCBlock<NSOrderedCollectionChange Function(NSOrderedCollectionChange)>
+ fromFunctionPointer(
+ ffi.Pointer<
+ ffi.NativeFunction<
+ ffi.Pointer<objc.ObjCObject> Function(
+ ffi.Pointer<objc.ObjCObject> arg0)>>
+ ptr) =>
+ objc.ObjCBlock<
+ NSOrderedCollectionChange Function(NSOrderedCollectionChange)>(
+ objc.newPointerBlock(
+ _ObjCBlock_NSOrderedCollectionChange_NSOrderedCollectionChange_fnPtrCallable,
+ ptr.cast()),
+ retain: false,
+ release: true);
+
+ /// Creates a block from a Dart function.
+ ///
+ /// This block must be invoked by native code running on the same thread as
+ /// the isolate that registered it. Invoking the block on the wrong thread
+ /// will result in a crash.
+ ///
+ /// If `keepIsolateAlive` is true, this block will keep this isolate alive
+ /// until it is garbage collected by both Dart and ObjC.
+ static objc.ObjCBlock<
+ NSOrderedCollectionChange Function(NSOrderedCollectionChange)> fromFunction(
+ NSOrderedCollectionChange Function(NSOrderedCollectionChange) fn,
+ {bool keepIsolateAlive = true}) =>
+ objc.ObjCBlock<NSOrderedCollectionChange Function(NSOrderedCollectionChange)>(
+ objc.newClosureBlock(
+ _ObjCBlock_NSOrderedCollectionChange_NSOrderedCollectionChange_closureCallable,
+ (ffi.Pointer<objc.ObjCObject> arg0) =>
+ fn(NSOrderedCollectionChange.castFromPointer(arg0, retain: true, release: true))
+ .ref
+ .retainAndAutorelease(),
+ keepIsolateAlive),
+ retain: false,
+ release: true);
+}
+
+/// Call operator for `objc.ObjCBlock<NSOrderedCollectionChange Function(NSOrderedCollectionChange)>`.
+extension ObjCBlock_NSOrderedCollectionChange_NSOrderedCollectionChange_CallExtension
+ on objc
+ .ObjCBlock<NSOrderedCollectionChange Function(NSOrderedCollectionChange)> {
+ NSOrderedCollectionChange call(NSOrderedCollectionChange arg0) =>
+ NSOrderedCollectionChange.castFromPointer(
+ ref.pointer.ref.invoke
+ .cast<
+ ffi.NativeFunction<
+ ffi.Pointer<objc.ObjCObject> Function(
+ ffi.Pointer<objc.ObjCBlockImpl> block,
+ ffi.Pointer<objc.ObjCObject> arg0)>>()
+ .asFunction<
+ ffi.Pointer<objc.ObjCObject> Function(
+ ffi.Pointer<objc.ObjCBlockImpl>,
+ ffi.Pointer<objc.ObjCObject>)>()(
+ ref.pointer, arg0.ref.pointer),
+ retain: true,
+ release: true);
+}
+
+ffi.Pointer<objc.ObjCBlockImpl>
+ _ObjCBlock_NSProgressUnpublishingHandler_NSProgress_fnPtrTrampoline(
+ ffi.Pointer<objc.ObjCBlockImpl> block,
+ ffi.Pointer<objc.ObjCObject> arg0) =>
+ block.ref.target
+ .cast<
+ ffi.NativeFunction<
+ ffi.Pointer<objc.ObjCBlockImpl> Function(
+ ffi.Pointer<objc.ObjCObject> arg0)>>()
+ .asFunction<
+ ffi.Pointer<objc.ObjCBlockImpl> Function(
+ ffi.Pointer<objc.ObjCObject>)>()(arg0);
+ffi.Pointer<ffi.Void>
+ _ObjCBlock_NSProgressUnpublishingHandler_NSProgress_fnPtrCallable =
+ ffi.Pointer.fromFunction<
+ ffi.Pointer<objc.ObjCBlockImpl> Function(
+ ffi.Pointer<objc.ObjCBlockImpl>,
+ ffi.Pointer<objc.ObjCObject>)>(
+ _ObjCBlock_NSProgressUnpublishingHandler_NSProgress_fnPtrTrampoline)
+ .cast();
+ffi.Pointer<objc.ObjCBlockImpl>
+ _ObjCBlock_NSProgressUnpublishingHandler_NSProgress_closureTrampoline(
+ ffi.Pointer<objc.ObjCBlockImpl> block,
+ ffi.Pointer<objc.ObjCObject> arg0) =>
+ (objc.getBlockClosure(block) as ffi.Pointer<objc.ObjCBlockImpl>
+ Function(ffi.Pointer<objc.ObjCObject>))(arg0);
+ffi.Pointer<ffi.Void>
+ _ObjCBlock_NSProgressUnpublishingHandler_NSProgress_closureCallable =
+ ffi.Pointer.fromFunction<
+ ffi.Pointer<objc.ObjCBlockImpl> Function(
+ ffi.Pointer<objc.ObjCBlockImpl>,
+ ffi.Pointer<objc.ObjCObject>)>(
+ _ObjCBlock_NSProgressUnpublishingHandler_NSProgress_closureTrampoline)
+ .cast();
+
+/// Construction methods for `objc.ObjCBlock<objc.ObjCBlock<ffi.Void Function()>? Function(NSProgress)>`.
+abstract final class ObjCBlock_NSProgressUnpublishingHandler_NSProgress {
+ /// Returns a block that wraps the given raw block pointer.
+ static objc
+ .ObjCBlock<objc.ObjCBlock<ffi.Void Function()>? Function(NSProgress)>
+ castFromPointer(ffi.Pointer<objc.ObjCBlockImpl> pointer,
+ {bool retain = false, bool release = false}) =>
+ objc.ObjCBlock<
+ objc.ObjCBlock<ffi.Void Function()>? Function(
+ NSProgress)>(pointer, retain: retain, release: release);
+
+ /// Creates a block from a C function pointer.
+ ///
+ /// This block must be invoked by native code running on the same thread as
+ /// the isolate that registered it. Invoking the block on the wrong thread
+ /// will result in a crash.
+ static objc.ObjCBlock<objc.ObjCBlock<ffi.Void Function()>? Function(NSProgress)> fromFunctionPointer(
+ ffi.Pointer<
+ ffi.NativeFunction<
+ ffi.Pointer<objc.ObjCBlockImpl> Function(
+ ffi.Pointer<objc.ObjCObject> arg0)>>
+ ptr) =>
+ objc.ObjCBlock<objc.ObjCBlock<ffi.Void Function()>? Function(NSProgress)>(
+ objc.newPointerBlock(
+ _ObjCBlock_NSProgressUnpublishingHandler_NSProgress_fnPtrCallable, ptr.cast()),
+ retain: false,
+ release: true);
+
+ /// Creates a block from a Dart function.
+ ///
+ /// This block must be invoked by native code running on the same thread as
+ /// the isolate that registered it. Invoking the block on the wrong thread
+ /// will result in a crash.
+ ///
+ /// If `keepIsolateAlive` is true, this block will keep this isolate alive
+ /// until it is garbage collected by both Dart and ObjC.
+ static objc
+ .ObjCBlock<objc.ObjCBlock<ffi.Void Function()>? Function(NSProgress)>
+ fromFunction(objc.ObjCBlock<ffi.Void Function()>? Function(NSProgress) fn,
+ {bool keepIsolateAlive = true}) =>
+ objc.ObjCBlock<objc.ObjCBlock<ffi.Void Function()>? Function(NSProgress)>(
+ objc.newClosureBlock(
+ _ObjCBlock_NSProgressUnpublishingHandler_NSProgress_closureCallable,
+ (ffi.Pointer<objc.ObjCObject> arg0) =>
+ fn(NSProgress.castFromPointer(arg0, retain: true, release: true))
+ ?.ref
+ .retainAndAutorelease() ??
+ ffi.nullptr,
+ keepIsolateAlive),
+ retain: false,
+ release: true);
+}
+
+/// Call operator for `objc.ObjCBlock<objc.ObjCBlock<ffi.Void Function()>? Function(NSProgress)>`.
+extension ObjCBlock_NSProgressUnpublishingHandler_NSProgress_CallExtension
+ on objc
+ .ObjCBlock<objc.ObjCBlock<ffi.Void Function()>? Function(NSProgress)> {
+ objc.ObjCBlock<ffi.Void Function()>? call(NSProgress arg0) => ref.pointer.ref.invoke
+ .cast<
+ ffi.NativeFunction<
+ ffi.Pointer<objc.ObjCBlockImpl> Function(
+ ffi.Pointer<objc.ObjCBlockImpl> block,
+ ffi.Pointer<objc.ObjCObject> arg0)>>()
+ .asFunction<ffi.Pointer<objc.ObjCBlockImpl> Function(ffi.Pointer<objc.ObjCBlockImpl>, ffi.Pointer<objc.ObjCObject>)>()
+ (ref.pointer, arg0.ref.pointer)
+ .address ==
+ 0
+ ? null
+ : ObjCBlock_ffiVoid.castFromPointer(
+ ref.pointer.ref.invoke
+ .cast<ffi.NativeFunction<ffi.Pointer<objc.ObjCBlockImpl> Function(ffi.Pointer<objc.ObjCBlockImpl> block, ffi.Pointer<objc.ObjCObject> arg0)>>()
+ .asFunction<ffi.Pointer<objc.ObjCBlockImpl> Function(ffi.Pointer<objc.ObjCBlockImpl>, ffi.Pointer<objc.ObjCObject>)>()(ref.pointer, arg0.ref.pointer),
+ retain: true,
+ release: true);
+}
+
+ffi.Pointer<objc.ObjCObject>
+ _ObjCBlock_NSProgress_ffiVoidNSDataNSError_fnPtrTrampoline(
+ ffi.Pointer<objc.ObjCBlockImpl> block,
+ ffi.Pointer<objc.ObjCBlockImpl> arg0) =>
+ block.ref.target
+ .cast<
+ ffi
+ .NativeFunction<
+ ffi.Pointer<objc.ObjCObject> Function(
+ ffi.Pointer<objc.ObjCBlockImpl> arg0)>>()
+ .asFunction<
+ ffi.Pointer<objc.ObjCObject> Function(
+ ffi.Pointer<objc.ObjCBlockImpl>)>()(arg0);
+ffi.Pointer<ffi.Void> _ObjCBlock_NSProgress_ffiVoidNSDataNSError_fnPtrCallable =
+ ffi.Pointer.fromFunction<
+ ffi.Pointer<objc.ObjCObject> Function(
+ ffi.Pointer<objc.ObjCBlockImpl>,
+ ffi.Pointer<objc.ObjCBlockImpl>)>(
+ _ObjCBlock_NSProgress_ffiVoidNSDataNSError_fnPtrTrampoline)
+ .cast();
+ffi.Pointer<objc.ObjCObject>
+ _ObjCBlock_NSProgress_ffiVoidNSDataNSError_closureTrampoline(
+ ffi.Pointer<objc.ObjCBlockImpl> block,
+ ffi.Pointer<objc.ObjCBlockImpl> arg0) =>
+ (objc.getBlockClosure(block) as ffi.Pointer<objc.ObjCObject> Function(
+ ffi.Pointer<objc.ObjCBlockImpl>))(arg0);
+ffi.Pointer<ffi.Void>
+ _ObjCBlock_NSProgress_ffiVoidNSDataNSError_closureCallable =
+ ffi.Pointer.fromFunction<
+ ffi.Pointer<objc.ObjCObject> Function(
+ ffi.Pointer<objc.ObjCBlockImpl>,
+ ffi.Pointer<objc.ObjCBlockImpl>)>(
+ _ObjCBlock_NSProgress_ffiVoidNSDataNSError_closureTrampoline)
+ .cast();
+
+/// Construction methods for `objc.ObjCBlock<NSProgress? Function(objc.ObjCBlock<ffi.Void Function(NSData?, NSError?)>)>`.
+abstract final class ObjCBlock_NSProgress_ffiVoidNSDataNSError {
+ /// Returns a block that wraps the given raw block pointer.
+ static objc.ObjCBlock<
+ NSProgress? Function(
+ objc.ObjCBlock<ffi.Void Function(NSData?, NSError?)>)>
+ castFromPointer(ffi.Pointer<objc.ObjCBlockImpl> pointer,
+ {bool retain = false, bool release = false}) =>
+ objc.ObjCBlock<
+ NSProgress? Function(
+ objc.ObjCBlock<ffi.Void Function(NSData?, NSError?)>)>(
+ pointer,
+ retain: retain,
+ release: release);
+
+ /// Creates a block from a C function pointer.
+ ///
+ /// This block must be invoked by native code running on the same thread as
+ /// the isolate that registered it. Invoking the block on the wrong thread
+ /// will result in a crash.
+ static objc.ObjCBlock<NSProgress? Function(objc.ObjCBlock<ffi.Void Function(NSData?, NSError?)>)>
+ fromFunctionPointer(
+ ffi.Pointer<
+ ffi.NativeFunction<
+ ffi.Pointer<objc.ObjCObject> Function(
+ ffi.Pointer<objc.ObjCBlockImpl> arg0)>>
+ ptr) =>
+ objc.ObjCBlock<NSProgress? Function(objc.ObjCBlock<ffi.Void Function(NSData?, NSError?)>)>(
+ objc.newPointerBlock(_ObjCBlock_NSProgress_ffiVoidNSDataNSError_fnPtrCallable, ptr.cast()),
+ retain: false,
+ release: true);
+
+ /// Creates a block from a Dart function.
+ ///
+ /// This block must be invoked by native code running on the same thread as
+ /// the isolate that registered it. Invoking the block on the wrong thread
+ /// will result in a crash.
+ ///
+ /// If `keepIsolateAlive` is true, this block will keep this isolate alive
+ /// until it is garbage collected by both Dart and ObjC.
+ static objc
+ .ObjCBlock<NSProgress? Function(objc.ObjCBlock<ffi.Void Function(NSData?, NSError?)>)>
+ fromFunction(NSProgress? Function(objc.ObjCBlock<ffi.Void Function(NSData?, NSError?)>) fn,
+ {bool keepIsolateAlive = true}) =>
+ objc.ObjCBlock<NSProgress? Function(objc.ObjCBlock<ffi.Void Function(NSData?, NSError?)>)>(
+ objc.newClosureBlock(
+ _ObjCBlock_NSProgress_ffiVoidNSDataNSError_closureCallable,
+ (ffi.Pointer<objc.ObjCBlockImpl> arg0) =>
+ fn(ObjCBlock_ffiVoid_NSData_NSError.castFromPointer(arg0, retain: true, release: true))
+ ?.ref
+ .retainAndAutorelease() ??
+ ffi.nullptr,
+ keepIsolateAlive),
+ retain: false,
+ release: true);
+}
+
+/// Call operator for `objc.ObjCBlock<NSProgress? Function(objc.ObjCBlock<ffi.Void Function(NSData?, NSError?)>)>`.
+extension ObjCBlock_NSProgress_ffiVoidNSDataNSError_CallExtension
+ on objc.ObjCBlock<
+ NSProgress? Function(
+ objc.ObjCBlock<ffi.Void Function(NSData?, NSError?)>)> {
+ NSProgress? call(objc.ObjCBlock<ffi.Void Function(NSData?, NSError?)> arg0) => ref
+ .pointer.ref.invoke
+ .cast<
+ ffi.NativeFunction<
+ ffi.Pointer<objc.ObjCObject> Function(
+ ffi.Pointer<objc.ObjCBlockImpl> block,
+ ffi.Pointer<objc.ObjCBlockImpl> arg0)>>()
+ .asFunction<ffi.Pointer<objc.ObjCObject> Function(ffi.Pointer<objc.ObjCBlockImpl>, ffi.Pointer<objc.ObjCBlockImpl>)>()
+ (ref.pointer, arg0.ref.pointer)
+ .address ==
+ 0
+ ? null
+ : NSProgress.castFromPointer(
+ ref.pointer.ref.invoke
+ .cast<ffi.NativeFunction<ffi.Pointer<objc.ObjCObject> Function(ffi.Pointer<objc.ObjCBlockImpl> block, ffi.Pointer<objc.ObjCBlockImpl> arg0)>>()
+ .asFunction<ffi.Pointer<objc.ObjCObject> Function(ffi.Pointer<objc.ObjCBlockImpl>, ffi.Pointer<objc.ObjCBlockImpl>)>()(ref.pointer, arg0.ref.pointer),
+ retain: true,
+ release: true);
+}
+
+ffi.Pointer<objc.ObjCObject>
+ _ObjCBlock_NSProgress_ffiVoidNSURLboolNSError_fnPtrTrampoline(
+ ffi.Pointer<objc.ObjCBlockImpl> block,
+ ffi.Pointer<objc.ObjCBlockImpl> arg0) =>
+ block.ref.target
+ .cast<
+ ffi.NativeFunction<
+ ffi.Pointer<objc.ObjCObject> Function(
+ ffi.Pointer<objc.ObjCBlockImpl> arg0)>>()
+ .asFunction<
+ ffi.Pointer<objc.ObjCObject> Function(
+ ffi.Pointer<objc.ObjCBlockImpl>)>()(arg0);
+ffi.Pointer<ffi.Void>
+ _ObjCBlock_NSProgress_ffiVoidNSURLboolNSError_fnPtrCallable =
+ ffi.Pointer.fromFunction<
+ ffi.Pointer<objc.ObjCObject> Function(
+ ffi.Pointer<objc.ObjCBlockImpl>,
+ ffi.Pointer<objc.ObjCBlockImpl>)>(
+ _ObjCBlock_NSProgress_ffiVoidNSURLboolNSError_fnPtrTrampoline)
+ .cast();
+ffi.Pointer<objc.ObjCObject>
+ _ObjCBlock_NSProgress_ffiVoidNSURLboolNSError_closureTrampoline(
+ ffi.Pointer<objc.ObjCBlockImpl> block,
+ ffi.Pointer<objc.ObjCBlockImpl> arg0) =>
+ (objc.getBlockClosure(block) as ffi.Pointer<objc.ObjCObject> Function(
+ ffi.Pointer<objc.ObjCBlockImpl>))(arg0);
+ffi.Pointer<ffi.Void>
+ _ObjCBlock_NSProgress_ffiVoidNSURLboolNSError_closureCallable =
+ ffi.Pointer.fromFunction<
+ ffi.Pointer<objc.ObjCObject> Function(
+ ffi.Pointer<objc.ObjCBlockImpl>,
+ ffi.Pointer<objc.ObjCBlockImpl>)>(
+ _ObjCBlock_NSProgress_ffiVoidNSURLboolNSError_closureTrampoline)
+ .cast();
+
+/// Construction methods for `objc.ObjCBlock<NSProgress? Function(objc.ObjCBlock<ffi.Void Function(NSURL?, ffi.Bool, NSError?)>)>`.
+abstract final class ObjCBlock_NSProgress_ffiVoidNSURLboolNSError {
+ /// Returns a block that wraps the given raw block pointer.
+ static objc.ObjCBlock<
+ NSProgress? Function(
+ objc.ObjCBlock<ffi.Void Function(NSURL?, ffi.Bool, NSError?)>)>
+ castFromPointer(ffi.Pointer<objc.ObjCBlockImpl> pointer,
+ {bool retain = false, bool release = false}) =>
+ objc.ObjCBlock<
+ NSProgress? Function(
+ objc.ObjCBlock<ffi.Void Function(NSURL?, ffi.Bool, NSError?)>)>(
+ pointer,
+ retain: retain,
+ release: release);
+
+ /// Creates a block from a C function pointer.
+ ///
+ /// This block must be invoked by native code running on the same thread as
+ /// the isolate that registered it. Invoking the block on the wrong thread
+ /// will result in a crash.
+ static objc.ObjCBlock<
+ NSProgress? Function(
+ objc.ObjCBlock<ffi.Void Function(NSURL?, ffi.Bool, NSError?)>)>
+ fromFunctionPointer(ffi.Pointer<ffi.NativeFunction<ffi.Pointer<objc.ObjCObject> Function(ffi.Pointer<objc.ObjCBlockImpl> arg0)>> ptr) =>
+ objc.ObjCBlock<
+ NSProgress? Function(
+ objc.ObjCBlock<ffi.Void Function(NSURL?, ffi.Bool, NSError?)>)>(
+ objc.newPointerBlock(
+ _ObjCBlock_NSProgress_ffiVoidNSURLboolNSError_fnPtrCallable, ptr.cast()),
+ retain: false,
+ release: true);
+
+ /// Creates a block from a Dart function.
+ ///
+ /// This block must be invoked by native code running on the same thread as
+ /// the isolate that registered it. Invoking the block on the wrong thread
+ /// will result in a crash.
+ ///
+ /// If `keepIsolateAlive` is true, this block will keep this isolate alive
+ /// until it is garbage collected by both Dart and ObjC.
+ static objc
+ .ObjCBlock<NSProgress? Function(objc.ObjCBlock<ffi.Void Function(NSURL?, ffi.Bool, NSError?)>)>
+ fromFunction(NSProgress? Function(objc.ObjCBlock<ffi.Void Function(NSURL?, ffi.Bool, NSError?)>) fn,
+ {bool keepIsolateAlive = true}) =>
+ objc.ObjCBlock<NSProgress? Function(objc.ObjCBlock<ffi.Void Function(NSURL?, ffi.Bool, NSError?)>)>(
+ objc.newClosureBlock(
+ _ObjCBlock_NSProgress_ffiVoidNSURLboolNSError_closureCallable,
+ (ffi.Pointer<objc.ObjCBlockImpl> arg0) =>
+ fn(ObjCBlock_ffiVoid_NSURL_bool_NSError.castFromPointer(arg0, retain: true, release: true))
+ ?.ref
+ .retainAndAutorelease() ??
+ ffi.nullptr,
+ keepIsolateAlive),
+ retain: false,
+ release: true);
+}
+
+/// Call operator for `objc.ObjCBlock<NSProgress? Function(objc.ObjCBlock<ffi.Void Function(NSURL?, ffi.Bool, NSError?)>)>`.
+extension ObjCBlock_NSProgress_ffiVoidNSURLboolNSError_CallExtension
+ on objc.ObjCBlock<
+ NSProgress? Function(
+ objc.ObjCBlock<ffi.Void Function(NSURL?, ffi.Bool, NSError?)>)> {
+ NSProgress? call(
+ objc.ObjCBlock<ffi.Void Function(NSURL?, ffi.Bool, NSError?)> arg0) =>
+ ref.pointer.ref.invoke
+ .cast<
+ ffi.NativeFunction<
+ ffi.Pointer<objc.ObjCObject> Function(
+ ffi.Pointer<objc.ObjCBlockImpl> block,
+ ffi.Pointer<objc.ObjCBlockImpl> arg0)>>()
+ .asFunction<ffi.Pointer<objc.ObjCObject> Function(ffi.Pointer<objc.ObjCBlockImpl>, ffi.Pointer<objc.ObjCBlockImpl>)>()
+ (ref.pointer, arg0.ref.pointer)
+ .address ==
+ 0
+ ? null
+ : NSProgress.castFromPointer(
+ ref.pointer.ref.invoke
+ .cast<ffi.NativeFunction<ffi.Pointer<objc.ObjCObject> Function(ffi.Pointer<objc.ObjCBlockImpl> block, ffi.Pointer<objc.ObjCBlockImpl> arg0)>>()
+ .asFunction<ffi.Pointer<objc.ObjCObject> Function(ffi.Pointer<objc.ObjCBlockImpl>, ffi.Pointer<objc.ObjCBlockImpl>)>()(ref.pointer, arg0.ref.pointer),
+ retain: true,
+ release: true);
+}
+
+ffi.Pointer<objc.ObjCObject>
+ _ObjCBlock_NSProgress_ffiVoid_NSString_ffiVoidNSDataNSError_fnPtrTrampoline(
+ ffi.Pointer<objc.ObjCBlockImpl> block,
+ ffi.Pointer<ffi.Void> arg0,
+ ffi.Pointer<objc.ObjCObject> arg1,
+ ffi.Pointer<objc.ObjCBlockImpl> arg2) =>
+ block.ref.target
+ .cast<
+ ffi.NativeFunction<
+ ffi.Pointer<objc.ObjCObject> Function(
+ ffi.Pointer<ffi.Void> arg0,
+ ffi.Pointer<objc.ObjCObject> arg1,
+ ffi.Pointer<objc.ObjCBlockImpl> arg2)>>()
+ .asFunction<
+ ffi.Pointer<objc.ObjCObject> Function(
+ ffi.Pointer<ffi.Void>,
+ ffi.Pointer<objc.ObjCObject>,
+ ffi.Pointer<objc.ObjCBlockImpl>)>()(arg0, arg1, arg2);
+ffi.Pointer<ffi.Void>
+ _ObjCBlock_NSProgress_ffiVoid_NSString_ffiVoidNSDataNSError_fnPtrCallable =
+ ffi.Pointer.fromFunction<
+ ffi.Pointer<objc.ObjCObject> Function(
+ ffi.Pointer<objc.ObjCBlockImpl>,
+ ffi.Pointer<ffi.Void>,
+ ffi.Pointer<objc.ObjCObject>,
+ ffi.Pointer<objc.ObjCBlockImpl>)>(
+ _ObjCBlock_NSProgress_ffiVoid_NSString_ffiVoidNSDataNSError_fnPtrTrampoline)
+ .cast();
+ffi.Pointer<objc.ObjCObject>
+ _ObjCBlock_NSProgress_ffiVoid_NSString_ffiVoidNSDataNSError_closureTrampoline(
+ ffi.Pointer<objc.ObjCBlockImpl> block,
+ ffi.Pointer<ffi.Void> arg0,
+ ffi.Pointer<objc.ObjCObject> arg1,
+ ffi.Pointer<objc.ObjCBlockImpl> arg2) =>
+ (objc.getBlockClosure(block) as ffi.Pointer<objc.ObjCObject> Function(
+ ffi.Pointer<ffi.Void>,
+ ffi.Pointer<objc.ObjCObject>,
+ ffi.Pointer<objc.ObjCBlockImpl>))(arg0, arg1, arg2);
+ffi.Pointer<ffi.Void>
+ _ObjCBlock_NSProgress_ffiVoid_NSString_ffiVoidNSDataNSError_closureCallable =
+ ffi.Pointer.fromFunction<
+ ffi.Pointer<objc.ObjCObject> Function(
+ ffi.Pointer<objc.ObjCBlockImpl>,
+ ffi.Pointer<ffi.Void>,
+ ffi.Pointer<objc.ObjCObject>,
+ ffi.Pointer<objc.ObjCBlockImpl>)>(
+ _ObjCBlock_NSProgress_ffiVoid_NSString_ffiVoidNSDataNSError_closureTrampoline)
+ .cast();
+
+/// Construction methods for `objc.ObjCBlock<NSProgress? Function(ffi.Pointer<ffi.Void>, NSString, objc.ObjCBlock<ffi.Void Function(NSData?, NSError?)>)>`.
+abstract final class ObjCBlock_NSProgress_ffiVoid_NSString_ffiVoidNSDataNSError {
+ /// Returns a block that wraps the given raw block pointer.
+ static objc.ObjCBlock<
+ NSProgress? Function(ffi.Pointer<ffi.Void>, NSString,
+ objc.ObjCBlock<ffi.Void Function(NSData?, NSError?)>)>
+ castFromPointer(ffi.Pointer<objc.ObjCBlockImpl> pointer,
+ {bool retain = false, bool release = false}) =>
+ objc.ObjCBlock<
+ NSProgress? Function(ffi.Pointer<ffi.Void>, NSString,
+ objc.ObjCBlock<ffi.Void Function(NSData?, NSError?)>)>(pointer,
+ retain: retain, release: release);
+
+ /// Creates a block from a C function pointer.
+ ///
+ /// This block must be invoked by native code running on the same thread as
+ /// the isolate that registered it. Invoking the block on the wrong thread
+ /// will result in a crash.
+ static objc.ObjCBlock<
+ NSProgress? Function(ffi.Pointer<ffi.Void>, NSString,
+ objc.ObjCBlock<ffi.Void Function(NSData?, NSError?)>)>
+ fromFunctionPointer(ffi.Pointer<ffi.NativeFunction<ffi.Pointer<objc.ObjCObject> Function(ffi.Pointer<ffi.Void> arg0, ffi.Pointer<objc.ObjCObject> arg1, ffi.Pointer<objc.ObjCBlockImpl> arg2)>> ptr) =>
+ objc.ObjCBlock<
+ NSProgress? Function(ffi.Pointer<ffi.Void>, NSString,
+ objc.ObjCBlock<ffi.Void Function(NSData?, NSError?)>)>(
+ objc.newPointerBlock(_ObjCBlock_NSProgress_ffiVoid_NSString_ffiVoidNSDataNSError_fnPtrCallable, ptr.cast()),
+ retain: false,
+ release: true);
+
+ /// Creates a block from a Dart function.
+ ///
+ /// This block must be invoked by native code running on the same thread as
+ /// the isolate that registered it. Invoking the block on the wrong thread
+ /// will result in a crash.
+ ///
+ /// If `keepIsolateAlive` is true, this block will keep this isolate alive
+ /// until it is garbage collected by both Dart and ObjC.
+ static objc.ObjCBlock<NSProgress? Function(ffi.Pointer<ffi.Void>, NSString, objc.ObjCBlock<ffi.Void Function(NSData?, NSError?)>)>
+ fromFunction(NSProgress? Function(ffi.Pointer<ffi.Void>, NSString, objc.ObjCBlock<ffi.Void Function(NSData?, NSError?)>) fn,
+ {bool keepIsolateAlive = true}) =>
+ objc.ObjCBlock<NSProgress? Function(ffi.Pointer<ffi.Void>, NSString, objc.ObjCBlock<ffi.Void Function(NSData?, NSError?)>)>(
+ objc.newClosureBlock(
+ _ObjCBlock_NSProgress_ffiVoid_NSString_ffiVoidNSDataNSError_closureCallable,
+ (ffi.Pointer<ffi.Void> arg0,
+ ffi.Pointer<objc.ObjCObject> arg1,
+ ffi.Pointer<objc.ObjCBlockImpl> arg2) =>
+ fn(arg0, NSString.castFromPointer(arg1, retain: true, release: true), ObjCBlock_ffiVoid_NSData_NSError.castFromPointer(arg2, retain: true, release: true))?.ref.retainAndAutorelease() ??
+ ffi.nullptr,
+ keepIsolateAlive),
+ retain: false,
+ release: true);
+}
+
+/// Call operator for `objc.ObjCBlock<NSProgress? Function(ffi.Pointer<ffi.Void>, NSString, objc.ObjCBlock<ffi.Void Function(NSData?, NSError?)>)>`.
+extension ObjCBlock_NSProgress_ffiVoid_NSString_ffiVoidNSDataNSError_CallExtension
+ on objc.ObjCBlock<
+ NSProgress? Function(ffi.Pointer<ffi.Void>, NSString,
+ objc.ObjCBlock<ffi.Void Function(NSData?, NSError?)>)> {
+ NSProgress? call(ffi.Pointer<ffi.Void> arg0, NSString arg1,
+ objc.ObjCBlock<ffi.Void Function(NSData?, NSError?)> arg2) =>
+ ref.pointer.ref.invoke
+ .cast<
+ ffi.NativeFunction<
+ ffi.Pointer<objc.ObjCObject> Function(
+ ffi.Pointer<objc.ObjCBlockImpl> block,
+ ffi.Pointer<ffi.Void> arg0,
+ ffi.Pointer<objc.ObjCObject> arg1,
+ ffi.Pointer<objc.ObjCBlockImpl> arg2)>>()
+ .asFunction<
+ ffi.Pointer<objc.ObjCObject> Function(
+ ffi.Pointer<objc.ObjCBlockImpl>,
+ ffi.Pointer<ffi.Void>,
+ ffi.Pointer<objc.ObjCObject>,
+ ffi.Pointer<objc.ObjCBlockImpl>)>()
+ (ref.pointer, arg0, arg1.ref.pointer, arg2.ref.pointer)
+ .address ==
+ 0
+ ? null
+ : NSProgress.castFromPointer(ref.pointer.ref.invoke.cast<ffi.NativeFunction<ffi.Pointer<objc.ObjCObject> Function(ffi.Pointer<objc.ObjCBlockImpl> block, ffi.Pointer<ffi.Void> arg0, ffi.Pointer<objc.ObjCObject> arg1, ffi.Pointer<objc.ObjCBlockImpl> arg2)>>().asFunction<ffi.Pointer<objc.ObjCObject> Function(ffi.Pointer<objc.ObjCBlockImpl>, ffi.Pointer<ffi.Void>, ffi.Pointer<objc.ObjCObject>, ffi.Pointer<objc.ObjCBlockImpl>)>()(ref.pointer, arg0, arg1.ref.pointer, arg2.ref.pointer), retain: true, release: true);
+}
+
+ffi.Pointer<objc.ObjCObject>
+ _ObjCBlock_NSProgress_ffiVoididNSItemProviderWritingNSError_fnPtrTrampoline(
+ ffi.Pointer<objc.ObjCBlockImpl> block,
+ ffi.Pointer<objc.ObjCBlockImpl> arg0) =>
+ block.ref.target
+ .cast<
+ ffi.NativeFunction<
+ ffi.Pointer<objc.ObjCObject> Function(
+ ffi.Pointer<objc.ObjCBlockImpl> arg0)>>()
+ .asFunction<
+ ffi.Pointer<objc.ObjCObject> Function(
+ ffi.Pointer<objc.ObjCBlockImpl>)>()(arg0);
+ffi.Pointer<ffi.Void>
+ _ObjCBlock_NSProgress_ffiVoididNSItemProviderWritingNSError_fnPtrCallable =
+ ffi.Pointer.fromFunction<
+ ffi.Pointer<objc.ObjCObject> Function(
+ ffi.Pointer<objc.ObjCBlockImpl>,
+ ffi.Pointer<objc.ObjCBlockImpl>)>(
+ _ObjCBlock_NSProgress_ffiVoididNSItemProviderWritingNSError_fnPtrTrampoline)
+ .cast();
+ffi.Pointer<objc.ObjCObject>
+ _ObjCBlock_NSProgress_ffiVoididNSItemProviderWritingNSError_closureTrampoline(
+ ffi.Pointer<objc.ObjCBlockImpl> block,
+ ffi.Pointer<objc.ObjCBlockImpl> arg0) =>
+ (objc.getBlockClosure(block) as ffi.Pointer<objc.ObjCObject> Function(
+ ffi.Pointer<objc.ObjCBlockImpl>))(arg0);
+ffi.Pointer<ffi.Void>
+ _ObjCBlock_NSProgress_ffiVoididNSItemProviderWritingNSError_closureCallable =
+ ffi.Pointer.fromFunction<
+ ffi.Pointer<objc.ObjCObject> Function(
+ ffi.Pointer<objc.ObjCBlockImpl>,
+ ffi.Pointer<objc.ObjCBlockImpl>)>(
+ _ObjCBlock_NSProgress_ffiVoididNSItemProviderWritingNSError_closureTrampoline)
+ .cast();
+
+/// Construction methods for `objc.ObjCBlock<NSProgress? Function(objc.ObjCBlock<ffi.Void Function(ffi.Pointer<objc.ObjCObject>?, NSError?)>)>`.
+abstract final class ObjCBlock_NSProgress_ffiVoididNSItemProviderWritingNSError {
+ /// Returns a block that wraps the given raw block pointer.
+ static objc.ObjCBlock<
+ NSProgress? Function(
+ objc.ObjCBlock<ffi.Void Function(ffi.Pointer<objc.ObjCObject>?, NSError?)>)>
+ castFromPointer(ffi.Pointer<objc.ObjCBlockImpl> pointer,
+ {bool retain = false, bool release = false}) =>
+ objc.ObjCBlock<
+ NSProgress? Function(
+ objc.ObjCBlock<ffi.Void Function(ffi.Pointer<objc.ObjCObject>?, NSError?)>)>(
+ pointer,
+ retain: retain,
+ release: release);
+
+ /// Creates a block from a C function pointer.
+ ///
+ /// This block must be invoked by native code running on the same thread as
+ /// the isolate that registered it. Invoking the block on the wrong thread
+ /// will result in a crash.
+ static objc.ObjCBlock<
+ NSProgress? Function(
+ objc.ObjCBlock<ffi.Void Function(ffi.Pointer<objc.ObjCObject>?, NSError?)>)>
+ fromFunctionPointer(ffi.Pointer<ffi.NativeFunction<ffi.Pointer<objc.ObjCObject> Function(ffi.Pointer<objc.ObjCBlockImpl> arg0)>> ptr) =>
+ objc.ObjCBlock<
+ NSProgress? Function(
+ objc.ObjCBlock<ffi.Void Function(ffi.Pointer<objc.ObjCObject>?, NSError?)>)>(
+ objc.newPointerBlock(
+ _ObjCBlock_NSProgress_ffiVoididNSItemProviderWritingNSError_fnPtrCallable, ptr.cast()),
+ retain: false,
+ release: true);
+
+ /// Creates a block from a Dart function.
+ ///
+ /// This block must be invoked by native code running on the same thread as
+ /// the isolate that registered it. Invoking the block on the wrong thread
+ /// will result in a crash.
+ ///
+ /// If `keepIsolateAlive` is true, this block will keep this isolate alive
+ /// until it is garbage collected by both Dart and ObjC.
+ static objc
+ .ObjCBlock<NSProgress? Function(objc.ObjCBlock<ffi.Void Function(ffi.Pointer<objc.ObjCObject>?, NSError?)>)>
+ fromFunction(NSProgress? Function(objc.ObjCBlock<ffi.Void Function(ffi.Pointer<objc.ObjCObject>?, NSError?)>) fn,
+ {bool keepIsolateAlive = true}) =>
+ objc.ObjCBlock<NSProgress? Function(objc.ObjCBlock<ffi.Void Function(ffi.Pointer<objc.ObjCObject>?, NSError?)>)>(
+ objc.newClosureBlock(
+ _ObjCBlock_NSProgress_ffiVoididNSItemProviderWritingNSError_closureCallable,
+ (ffi.Pointer<objc.ObjCBlockImpl> arg0) =>
+ fn(ObjCBlock_ffiVoid_idNSItemProviderWriting_NSError.castFromPointer(arg0, retain: true, release: true))
+ ?.ref
+ .retainAndAutorelease() ??
+ ffi.nullptr,
+ keepIsolateAlive),
+ retain: false,
+ release: true);
+}
+
+/// Call operator for `objc.ObjCBlock<NSProgress? Function(objc.ObjCBlock<ffi.Void Function(ffi.Pointer<objc.ObjCObject>?, NSError?)>)>`.
+extension ObjCBlock_NSProgress_ffiVoididNSItemProviderWritingNSError_CallExtension
+ on objc.ObjCBlock<
+ NSProgress? Function(
+ objc.ObjCBlock<
+ ffi.Void Function(ffi.Pointer<objc.ObjCObject>?, NSError?)>)> {
+ NSProgress? call(objc.ObjCBlock<ffi.Void Function(ffi.Pointer<objc.ObjCObject>?, NSError?)> arg0) => ref
+ .pointer.ref.invoke
+ .cast<
+ ffi.NativeFunction<
+ ffi.Pointer<objc.ObjCObject> Function(
+ ffi.Pointer<objc.ObjCBlockImpl> block,
+ ffi.Pointer<objc.ObjCBlockImpl> arg0)>>()
+ .asFunction<ffi.Pointer<objc.ObjCObject> Function(ffi.Pointer<objc.ObjCBlockImpl>, ffi.Pointer<objc.ObjCBlockImpl>)>()
+ (ref.pointer, arg0.ref.pointer)
+ .address ==
+ 0
+ ? null
+ : NSProgress.castFromPointer(
+ ref.pointer.ref.invoke
+ .cast<ffi.NativeFunction<ffi.Pointer<objc.ObjCObject> Function(ffi.Pointer<objc.ObjCBlockImpl> block, ffi.Pointer<objc.ObjCBlockImpl> arg0)>>()
+ .asFunction<ffi.Pointer<objc.ObjCObject> Function(ffi.Pointer<objc.ObjCBlockImpl>, ffi.Pointer<objc.ObjCBlockImpl>)>()(ref.pointer, arg0.ref.pointer),
+ retain: true,
+ release: true);
+}
+
ffi.Pointer<objc.ObjCObject> _ObjCBlock_NSString_ffiVoid_fnPtrTrampoline(
ffi.Pointer<objc.ObjCBlockImpl> block, ffi.Pointer<ffi.Void> arg0) =>
block.ref.target
@@ -14250,6 +16572,438 @@
ffi.Pointer<ffi.Void>)>()(ref.pointer, arg0);
}
+bool _ObjCBlock_bool_KeyType_ObjectType_bool_fnPtrTrampoline(
+ ffi.Pointer<objc.ObjCBlockImpl> block,
+ ffi.Pointer<objc.ObjCObject> arg0,
+ ffi.Pointer<objc.ObjCObject> arg1,
+ ffi.Pointer<ffi.Bool> arg2) =>
+ block.ref.target
+ .cast<
+ ffi.NativeFunction<
+ ffi.Bool Function(
+ ffi.Pointer<objc.ObjCObject> arg0,
+ ffi.Pointer<objc.ObjCObject> arg1,
+ ffi.Pointer<ffi.Bool> arg2)>>()
+ .asFunction<
+ bool Function(
+ ffi.Pointer<objc.ObjCObject>,
+ ffi.Pointer<objc.ObjCObject>,
+ ffi.Pointer<ffi.Bool>)>()(arg0, arg1, arg2);
+ffi.Pointer<ffi.Void> _ObjCBlock_bool_KeyType_ObjectType_bool_fnPtrCallable =
+ ffi.Pointer.fromFunction<
+ ffi.Bool Function(
+ ffi.Pointer<objc.ObjCBlockImpl>,
+ ffi.Pointer<objc.ObjCObject>,
+ ffi.Pointer<objc.ObjCObject>,
+ ffi.Pointer<ffi.Bool>)>(
+ _ObjCBlock_bool_KeyType_ObjectType_bool_fnPtrTrampoline, false)
+ .cast();
+bool _ObjCBlock_bool_KeyType_ObjectType_bool_closureTrampoline(
+ ffi.Pointer<objc.ObjCBlockImpl> block,
+ ffi.Pointer<objc.ObjCObject> arg0,
+ ffi.Pointer<objc.ObjCObject> arg1,
+ ffi.Pointer<ffi.Bool> arg2) =>
+ (objc.getBlockClosure(block) as bool Function(ffi.Pointer<objc.ObjCObject>,
+ ffi.Pointer<objc.ObjCObject>, ffi.Pointer<ffi.Bool>))(arg0, arg1, arg2);
+ffi.Pointer<ffi.Void> _ObjCBlock_bool_KeyType_ObjectType_bool_closureCallable =
+ ffi.Pointer.fromFunction<
+ ffi.Bool Function(
+ ffi.Pointer<objc.ObjCBlockImpl>,
+ ffi.Pointer<objc.ObjCObject>,
+ ffi.Pointer<objc.ObjCObject>,
+ ffi.Pointer<ffi.Bool>)>(
+ _ObjCBlock_bool_KeyType_ObjectType_bool_closureTrampoline, false)
+ .cast();
+
+/// Construction methods for `objc.ObjCBlock<ffi.Bool Function(ffi.Pointer<objc.ObjCObject>, ffi.Pointer<objc.ObjCObject>, ffi.Pointer<ffi.Bool>)>`.
+abstract final class ObjCBlock_bool_KeyType_ObjectType_bool {
+ /// Returns a block that wraps the given raw block pointer.
+ static objc.ObjCBlock<
+ ffi.Bool Function(ffi.Pointer<objc.ObjCObject>,
+ ffi.Pointer<objc.ObjCObject>, ffi.Pointer<ffi.Bool>)>
+ castFromPointer(ffi.Pointer<objc.ObjCBlockImpl> pointer,
+ {bool retain = false, bool release = false}) =>
+ objc.ObjCBlock<
+ ffi.Bool Function(
+ ffi.Pointer<objc.ObjCObject>,
+ ffi.Pointer<objc.ObjCObject>,
+ ffi.Pointer<ffi.Bool>)>(pointer,
+ retain: retain, release: release);
+
+ /// Creates a block from a C function pointer.
+ ///
+ /// This block must be invoked by native code running on the same thread as
+ /// the isolate that registered it. Invoking the block on the wrong thread
+ /// will result in a crash.
+ static objc.ObjCBlock<
+ ffi.Bool Function(ffi.Pointer<objc.ObjCObject>,
+ ffi.Pointer<objc.ObjCObject>, ffi.Pointer<ffi.Bool>)>
+ fromFunctionPointer(ffi.Pointer<ffi.NativeFunction<ffi.Bool Function(ffi.Pointer<objc.ObjCObject> arg0, ffi.Pointer<objc.ObjCObject> arg1, ffi.Pointer<ffi.Bool> arg2)>> ptr) =>
+ objc.ObjCBlock<
+ ffi.Bool Function(ffi.Pointer<objc.ObjCObject>,
+ ffi.Pointer<objc.ObjCObject>, ffi.Pointer<ffi.Bool>)>(
+ objc.newPointerBlock(_ObjCBlock_bool_KeyType_ObjectType_bool_fnPtrCallable, ptr.cast()),
+ retain: false,
+ release: true);
+
+ /// Creates a block from a Dart function.
+ ///
+ /// This block must be invoked by native code running on the same thread as
+ /// the isolate that registered it. Invoking the block on the wrong thread
+ /// will result in a crash.
+ ///
+ /// If `keepIsolateAlive` is true, this block will keep this isolate alive
+ /// until it is garbage collected by both Dart and ObjC.
+ static objc.ObjCBlock<ffi.Bool Function(ffi.Pointer<objc.ObjCObject>, ffi.Pointer<objc.ObjCObject>, ffi.Pointer<ffi.Bool>)>
+ fromFunction(bool Function(objc.ObjCObjectBase, objc.ObjCObjectBase, ffi.Pointer<ffi.Bool>) fn,
+ {bool keepIsolateAlive = true}) =>
+ objc.ObjCBlock<ffi.Bool Function(ffi.Pointer<objc.ObjCObject>, ffi.Pointer<objc.ObjCObject>, ffi.Pointer<ffi.Bool>)>(
+ objc.newClosureBlock(
+ _ObjCBlock_bool_KeyType_ObjectType_bool_closureCallable,
+ (ffi.Pointer<objc.ObjCObject> arg0, ffi.Pointer<objc.ObjCObject> arg1, ffi.Pointer<ffi.Bool> arg2) => fn(
+ objc.ObjCObjectBase(arg0, retain: true, release: true),
+ objc.ObjCObjectBase(arg1, retain: true, release: true),
+ arg2),
+ keepIsolateAlive),
+ retain: false,
+ release: true);
+}
+
+/// Call operator for `objc.ObjCBlock<ffi.Bool Function(ffi.Pointer<objc.ObjCObject>, ffi.Pointer<objc.ObjCObject>, ffi.Pointer<ffi.Bool>)>`.
+extension ObjCBlock_bool_KeyType_ObjectType_bool_CallExtension
+ on objc.ObjCBlock<
+ ffi.Bool Function(ffi.Pointer<objc.ObjCObject>,
+ ffi.Pointer<objc.ObjCObject>, ffi.Pointer<ffi.Bool>)> {
+ bool call(objc.ObjCObjectBase arg0, objc.ObjCObjectBase arg1,
+ ffi.Pointer<ffi.Bool> arg2) =>
+ ref.pointer.ref.invoke
+ .cast<
+ ffi.NativeFunction<
+ ffi.Bool Function(
+ ffi.Pointer<objc.ObjCBlockImpl> block,
+ ffi.Pointer<objc.ObjCObject> arg0,
+ ffi.Pointer<objc.ObjCObject> arg1,
+ ffi.Pointer<ffi.Bool> arg2)>>()
+ .asFunction<
+ bool Function(
+ ffi.Pointer<objc.ObjCBlockImpl>,
+ ffi.Pointer<objc.ObjCObject>,
+ ffi.Pointer<objc.ObjCObject>,
+ ffi.Pointer<ffi.Bool>)>()(
+ ref.pointer, arg0.ref.pointer, arg1.ref.pointer, arg2);
+}
+
+bool _ObjCBlock_bool_NSUInteger_bool_fnPtrTrampoline(
+ ffi.Pointer<objc.ObjCBlockImpl> block,
+ int arg0,
+ ffi.Pointer<ffi.Bool> arg1) =>
+ block.ref.target
+ .cast<
+ ffi.NativeFunction<
+ ffi.Bool Function(
+ ffi.UnsignedLong arg0, ffi.Pointer<ffi.Bool> arg1)>>()
+ .asFunction<bool Function(int, ffi.Pointer<ffi.Bool>)>()(arg0, arg1);
+ffi.Pointer<ffi.Void> _ObjCBlock_bool_NSUInteger_bool_fnPtrCallable =
+ ffi.Pointer.fromFunction<
+ ffi.Bool Function(ffi.Pointer<objc.ObjCBlockImpl>,
+ ffi.UnsignedLong, ffi.Pointer<ffi.Bool>)>(
+ _ObjCBlock_bool_NSUInteger_bool_fnPtrTrampoline, false)
+ .cast();
+bool _ObjCBlock_bool_NSUInteger_bool_closureTrampoline(
+ ffi.Pointer<objc.ObjCBlockImpl> block,
+ int arg0,
+ ffi.Pointer<ffi.Bool> arg1) =>
+ (objc.getBlockClosure(block) as bool Function(int, ffi.Pointer<ffi.Bool>))(
+ arg0, arg1);
+ffi.Pointer<ffi.Void> _ObjCBlock_bool_NSUInteger_bool_closureCallable =
+ ffi.Pointer.fromFunction<
+ ffi.Bool Function(ffi.Pointer<objc.ObjCBlockImpl>,
+ ffi.UnsignedLong, ffi.Pointer<ffi.Bool>)>(
+ _ObjCBlock_bool_NSUInteger_bool_closureTrampoline, false)
+ .cast();
+
+/// Construction methods for `objc.ObjCBlock<ffi.Bool Function(ffi.UnsignedLong, ffi.Pointer<ffi.Bool>)>`.
+abstract final class ObjCBlock_bool_NSUInteger_bool {
+ /// Returns a block that wraps the given raw block pointer.
+ static objc
+ .ObjCBlock<ffi.Bool Function(ffi.UnsignedLong, ffi.Pointer<ffi.Bool>)>
+ castFromPointer(ffi.Pointer<objc.ObjCBlockImpl> pointer,
+ {bool retain = false, bool release = false}) =>
+ objc.ObjCBlock<
+ ffi.Bool Function(ffi.UnsignedLong, ffi.Pointer<ffi.Bool>)>(
+ pointer,
+ retain: retain,
+ release: release);
+
+ /// Creates a block from a C function pointer.
+ ///
+ /// This block must be invoked by native code running on the same thread as
+ /// the isolate that registered it. Invoking the block on the wrong thread
+ /// will result in a crash.
+ static objc.ObjCBlock<ffi.Bool Function(ffi.UnsignedLong, ffi.Pointer<ffi.Bool>)> fromFunctionPointer(
+ ffi.Pointer<
+ ffi.NativeFunction<
+ ffi.Bool Function(
+ ffi.UnsignedLong arg0, ffi.Pointer<ffi.Bool> arg1)>>
+ ptr) =>
+ objc.ObjCBlock<ffi.Bool Function(ffi.UnsignedLong, ffi.Pointer<ffi.Bool>)>(
+ objc.newPointerBlock(_ObjCBlock_bool_NSUInteger_bool_fnPtrCallable, ptr.cast()),
+ retain: false,
+ release: true);
+
+ /// Creates a block from a Dart function.
+ ///
+ /// This block must be invoked by native code running on the same thread as
+ /// the isolate that registered it. Invoking the block on the wrong thread
+ /// will result in a crash.
+ ///
+ /// If `keepIsolateAlive` is true, this block will keep this isolate alive
+ /// until it is garbage collected by both Dart and ObjC.
+ static objc
+ .ObjCBlock<ffi.Bool Function(ffi.UnsignedLong, ffi.Pointer<ffi.Bool>)>
+ fromFunction(bool Function(int, ffi.Pointer<ffi.Bool>) fn,
+ {bool keepIsolateAlive = true}) =>
+ objc.ObjCBlock<
+ ffi.Bool Function(ffi.UnsignedLong, ffi.Pointer<ffi.Bool>)>(
+ objc.newClosureBlock(
+ _ObjCBlock_bool_NSUInteger_bool_closureCallable,
+ (int arg0, ffi.Pointer<ffi.Bool> arg1) => fn(arg0, arg1),
+ keepIsolateAlive),
+ retain: false,
+ release: true);
+}
+
+/// Call operator for `objc.ObjCBlock<ffi.Bool Function(ffi.UnsignedLong, ffi.Pointer<ffi.Bool>)>`.
+extension ObjCBlock_bool_NSUInteger_bool_CallExtension on objc
+ .ObjCBlock<ffi.Bool Function(ffi.UnsignedLong, ffi.Pointer<ffi.Bool>)> {
+ bool call(int arg0, ffi.Pointer<ffi.Bool> arg1) => ref.pointer.ref.invoke
+ .cast<
+ ffi.NativeFunction<
+ ffi.Bool Function(ffi.Pointer<objc.ObjCBlockImpl> block,
+ ffi.UnsignedLong arg0, ffi.Pointer<ffi.Bool> arg1)>>()
+ .asFunction<
+ bool Function(ffi.Pointer<objc.ObjCBlockImpl>, int,
+ ffi.Pointer<ffi.Bool>)>()(ref.pointer, arg0, arg1);
+}
+
+bool _ObjCBlock_bool_ObjectType_NSUInteger_bool_fnPtrTrampoline(
+ ffi.Pointer<objc.ObjCBlockImpl> block,
+ ffi.Pointer<objc.ObjCObject> arg0,
+ int arg1,
+ ffi.Pointer<ffi.Bool> arg2) =>
+ block.ref.target
+ .cast<
+ ffi.NativeFunction<
+ ffi.Bool Function(ffi.Pointer<objc.ObjCObject> arg0,
+ ffi.UnsignedLong arg1, ffi.Pointer<ffi.Bool> arg2)>>()
+ .asFunction<
+ bool Function(ffi.Pointer<objc.ObjCObject>, int,
+ ffi.Pointer<ffi.Bool>)>()(arg0, arg1, arg2);
+ffi.Pointer<ffi.Void> _ObjCBlock_bool_ObjectType_NSUInteger_bool_fnPtrCallable =
+ ffi.Pointer.fromFunction<
+ ffi.Bool Function(
+ ffi.Pointer<objc.ObjCBlockImpl>,
+ ffi.Pointer<objc.ObjCObject>,
+ ffi.UnsignedLong,
+ ffi.Pointer<ffi.Bool>)>(
+ _ObjCBlock_bool_ObjectType_NSUInteger_bool_fnPtrTrampoline, false)
+ .cast();
+bool _ObjCBlock_bool_ObjectType_NSUInteger_bool_closureTrampoline(
+ ffi.Pointer<objc.ObjCBlockImpl> block,
+ ffi.Pointer<objc.ObjCObject> arg0,
+ int arg1,
+ ffi.Pointer<ffi.Bool> arg2) =>
+ (objc.getBlockClosure(block) as bool Function(ffi.Pointer<objc.ObjCObject>,
+ int, ffi.Pointer<ffi.Bool>))(arg0, arg1, arg2);
+ffi.Pointer<ffi.Void>
+ _ObjCBlock_bool_ObjectType_NSUInteger_bool_closureCallable =
+ ffi.Pointer.fromFunction<
+ ffi.Bool Function(
+ ffi.Pointer<objc.ObjCBlockImpl>,
+ ffi.Pointer<objc.ObjCObject>,
+ ffi.UnsignedLong,
+ ffi.Pointer<ffi.Bool>)>(
+ _ObjCBlock_bool_ObjectType_NSUInteger_bool_closureTrampoline, false)
+ .cast();
+
+/// Construction methods for `objc.ObjCBlock<ffi.Bool Function(ffi.Pointer<objc.ObjCObject>, ffi.UnsignedLong, ffi.Pointer<ffi.Bool>)>`.
+abstract final class ObjCBlock_bool_ObjectType_NSUInteger_bool {
+ /// Returns a block that wraps the given raw block pointer.
+ static objc.ObjCBlock<
+ ffi.Bool Function(ffi.Pointer<objc.ObjCObject>, ffi.UnsignedLong,
+ ffi.Pointer<ffi.Bool>)>
+ castFromPointer(ffi.Pointer<objc.ObjCBlockImpl> pointer,
+ {bool retain = false, bool release = false}) =>
+ objc.ObjCBlock<
+ ffi.Bool Function(ffi.Pointer<objc.ObjCObject>,
+ ffi.UnsignedLong, ffi.Pointer<ffi.Bool>)>(pointer,
+ retain: retain, release: release);
+
+ /// Creates a block from a C function pointer.
+ ///
+ /// This block must be invoked by native code running on the same thread as
+ /// the isolate that registered it. Invoking the block on the wrong thread
+ /// will result in a crash.
+ static objc.ObjCBlock<
+ ffi.Bool Function(ffi.Pointer<objc.ObjCObject>, ffi.UnsignedLong,
+ ffi.Pointer<ffi.Bool>)>
+ fromFunctionPointer(ffi.Pointer<ffi.NativeFunction<ffi.Bool Function(ffi.Pointer<objc.ObjCObject> arg0, ffi.UnsignedLong arg1, ffi.Pointer<ffi.Bool> arg2)>> ptr) =>
+ objc.ObjCBlock<
+ ffi.Bool Function(ffi.Pointer<objc.ObjCObject>,
+ ffi.UnsignedLong, ffi.Pointer<ffi.Bool>)>(
+ objc.newPointerBlock(_ObjCBlock_bool_ObjectType_NSUInteger_bool_fnPtrCallable, ptr.cast()),
+ retain: false,
+ release: true);
+
+ /// Creates a block from a Dart function.
+ ///
+ /// This block must be invoked by native code running on the same thread as
+ /// the isolate that registered it. Invoking the block on the wrong thread
+ /// will result in a crash.
+ ///
+ /// If `keepIsolateAlive` is true, this block will keep this isolate alive
+ /// until it is garbage collected by both Dart and ObjC.
+ static objc
+ .ObjCBlock<ffi.Bool Function(ffi.Pointer<objc.ObjCObject>, ffi.UnsignedLong, ffi.Pointer<ffi.Bool>)>
+ fromFunction(
+ bool Function(objc.ObjCObjectBase, int, ffi.Pointer<ffi.Bool>) fn,
+ {bool keepIsolateAlive = true}) =>
+ objc.ObjCBlock<ffi.Bool Function(ffi.Pointer<objc.ObjCObject>, ffi.UnsignedLong, ffi.Pointer<ffi.Bool>)>(
+ objc.newClosureBlock(
+ _ObjCBlock_bool_ObjectType_NSUInteger_bool_closureCallable,
+ (ffi.Pointer<objc.ObjCObject> arg0, int arg1,
+ ffi.Pointer<ffi.Bool> arg2) =>
+ fn(objc.ObjCObjectBase(arg0, retain: true, release: true), arg1, arg2),
+ keepIsolateAlive),
+ retain: false,
+ release: true);
+}
+
+/// Call operator for `objc.ObjCBlock<ffi.Bool Function(ffi.Pointer<objc.ObjCObject>, ffi.UnsignedLong, ffi.Pointer<ffi.Bool>)>`.
+extension ObjCBlock_bool_ObjectType_NSUInteger_bool_CallExtension
+ on objc.ObjCBlock<
+ ffi.Bool Function(ffi.Pointer<objc.ObjCObject>, ffi.UnsignedLong,
+ ffi.Pointer<ffi.Bool>)> {
+ bool call(objc.ObjCObjectBase arg0, int arg1, ffi.Pointer<ffi.Bool> arg2) =>
+ ref.pointer.ref.invoke
+ .cast<
+ ffi.NativeFunction<
+ ffi.Bool Function(
+ ffi.Pointer<objc.ObjCBlockImpl> block,
+ ffi.Pointer<objc.ObjCObject> arg0,
+ ffi.UnsignedLong arg1,
+ ffi.Pointer<ffi.Bool> arg2)>>()
+ .asFunction<
+ bool Function(
+ ffi.Pointer<objc.ObjCBlockImpl>,
+ ffi.Pointer<objc.ObjCObject>,
+ int,
+ ffi.Pointer<ffi.Bool>)>()(
+ ref.pointer, arg0.ref.pointer, arg1, arg2);
+}
+
+bool _ObjCBlock_bool_ObjectType_bool_fnPtrTrampoline(
+ ffi.Pointer<objc.ObjCBlockImpl> block,
+ ffi.Pointer<objc.ObjCObject> arg0,
+ ffi.Pointer<ffi.Bool> arg1) =>
+ block.ref.target
+ .cast<
+ ffi.NativeFunction<
+ ffi.Bool Function(ffi.Pointer<objc.ObjCObject> arg0,
+ ffi.Pointer<ffi.Bool> arg1)>>()
+ .asFunction<
+ bool Function(ffi.Pointer<objc.ObjCObject>,
+ ffi.Pointer<ffi.Bool>)>()(arg0, arg1);
+ffi.Pointer<ffi.Void> _ObjCBlock_bool_ObjectType_bool_fnPtrCallable =
+ ffi.Pointer.fromFunction<
+ ffi.Bool Function(ffi.Pointer<objc.ObjCBlockImpl>,
+ ffi.Pointer<objc.ObjCObject>, ffi.Pointer<ffi.Bool>)>(
+ _ObjCBlock_bool_ObjectType_bool_fnPtrTrampoline, false)
+ .cast();
+bool _ObjCBlock_bool_ObjectType_bool_closureTrampoline(
+ ffi.Pointer<objc.ObjCBlockImpl> block,
+ ffi.Pointer<objc.ObjCObject> arg0,
+ ffi.Pointer<ffi.Bool> arg1) =>
+ (objc.getBlockClosure(block) as bool Function(
+ ffi.Pointer<objc.ObjCObject>, ffi.Pointer<ffi.Bool>))(arg0, arg1);
+ffi.Pointer<ffi.Void> _ObjCBlock_bool_ObjectType_bool_closureCallable =
+ ffi.Pointer.fromFunction<
+ ffi.Bool Function(ffi.Pointer<objc.ObjCBlockImpl>,
+ ffi.Pointer<objc.ObjCObject>, ffi.Pointer<ffi.Bool>)>(
+ _ObjCBlock_bool_ObjectType_bool_closureTrampoline, false)
+ .cast();
+
+/// Construction methods for `objc.ObjCBlock<ffi.Bool Function(ffi.Pointer<objc.ObjCObject>, ffi.Pointer<ffi.Bool>)>`.
+abstract final class ObjCBlock_bool_ObjectType_bool {
+ /// Returns a block that wraps the given raw block pointer.
+ static objc.ObjCBlock<
+ ffi.Bool Function(
+ ffi.Pointer<objc.ObjCObject>, ffi.Pointer<ffi.Bool>)>
+ castFromPointer(ffi.Pointer<objc.ObjCBlockImpl> pointer,
+ {bool retain = false, bool release = false}) =>
+ objc.ObjCBlock<
+ ffi.Bool Function(
+ ffi.Pointer<objc.ObjCObject>, ffi.Pointer<ffi.Bool>)>(
+ pointer,
+ retain: retain,
+ release: release);
+
+ /// Creates a block from a C function pointer.
+ ///
+ /// This block must be invoked by native code running on the same thread as
+ /// the isolate that registered it. Invoking the block on the wrong thread
+ /// will result in a crash.
+ static objc.ObjCBlock<ffi.Bool Function(ffi.Pointer<objc.ObjCObject>, ffi.Pointer<ffi.Bool>)> fromFunctionPointer(
+ ffi.Pointer<
+ ffi.NativeFunction<
+ ffi.Bool Function(ffi.Pointer<objc.ObjCObject> arg0,
+ ffi.Pointer<ffi.Bool> arg1)>>
+ ptr) =>
+ objc.ObjCBlock<ffi.Bool Function(ffi.Pointer<objc.ObjCObject>, ffi.Pointer<ffi.Bool>)>(
+ objc.newPointerBlock(_ObjCBlock_bool_ObjectType_bool_fnPtrCallable, ptr.cast()),
+ retain: false,
+ release: true);
+
+ /// Creates a block from a Dart function.
+ ///
+ /// This block must be invoked by native code running on the same thread as
+ /// the isolate that registered it. Invoking the block on the wrong thread
+ /// will result in a crash.
+ ///
+ /// If `keepIsolateAlive` is true, this block will keep this isolate alive
+ /// until it is garbage collected by both Dart and ObjC.
+ static objc.ObjCBlock<
+ ffi.Bool Function(ffi.Pointer<objc.ObjCObject>, ffi.Pointer<ffi.Bool>)> fromFunction(
+ bool Function(objc.ObjCObjectBase, ffi.Pointer<ffi.Bool>) fn,
+ {bool keepIsolateAlive = true}) =>
+ objc.ObjCBlock<ffi.Bool Function(ffi.Pointer<objc.ObjCObject>, ffi.Pointer<ffi.Bool>)>(
+ objc.newClosureBlock(
+ _ObjCBlock_bool_ObjectType_bool_closureCallable,
+ (ffi.Pointer<objc.ObjCObject> arg0, ffi.Pointer<ffi.Bool> arg1) =>
+ fn(objc.ObjCObjectBase(arg0, retain: true, release: true), arg1),
+ keepIsolateAlive),
+ retain: false,
+ release: true);
+}
+
+/// Call operator for `objc.ObjCBlock<ffi.Bool Function(ffi.Pointer<objc.ObjCObject>, ffi.Pointer<ffi.Bool>)>`.
+extension ObjCBlock_bool_ObjectType_bool_CallExtension on objc.ObjCBlock<
+ ffi.Bool Function(ffi.Pointer<objc.ObjCObject>, ffi.Pointer<ffi.Bool>)> {
+ bool call(objc.ObjCObjectBase arg0, ffi.Pointer<ffi.Bool> arg1) => ref
+ .pointer.ref.invoke
+ .cast<
+ ffi.NativeFunction<
+ ffi.Bool Function(
+ ffi.Pointer<objc.ObjCBlockImpl> block,
+ ffi.Pointer<objc.ObjCObject> arg0,
+ ffi.Pointer<ffi.Bool> arg1)>>()
+ .asFunction<
+ bool Function(
+ ffi.Pointer<objc.ObjCBlockImpl>,
+ ffi.Pointer<objc.ObjCObject>,
+ ffi.Pointer<ffi.Bool>)>()(ref.pointer, arg0.ref.pointer, arg1);
+}
+
bool _ObjCBlock_bool_ffiVoid_fnPtrTrampoline(
ffi.Pointer<objc.ObjCBlockImpl> block, ffi.Pointer<ffi.Void> arg0) =>
block.ref.target
@@ -14630,6 +17384,692 @@
ffi.Pointer<objc.ObjCSelector>)>()(ref.pointer, arg0, arg1);
}
+void _ObjCBlock_ffiVoid_fnPtrTrampoline(
+ ffi.Pointer<objc.ObjCBlockImpl> block,
+) =>
+ block.ref.target
+ .cast<ffi.NativeFunction<ffi.Void Function()>>()
+ .asFunction<void Function()>()();
+ffi.Pointer<ffi.Void> _ObjCBlock_ffiVoid_fnPtrCallable = ffi.Pointer
+ .fromFunction<ffi.Void Function(ffi.Pointer<objc.ObjCBlockImpl>)>(
+ _ObjCBlock_ffiVoid_fnPtrTrampoline)
+ .cast();
+void _ObjCBlock_ffiVoid_closureTrampoline(
+ ffi.Pointer<objc.ObjCBlockImpl> block,
+) =>
+ (objc.getBlockClosure(block) as void Function())();
+ffi.Pointer<ffi.Void> _ObjCBlock_ffiVoid_closureCallable = ffi.Pointer
+ .fromFunction<ffi.Void Function(ffi.Pointer<objc.ObjCBlockImpl>)>(
+ _ObjCBlock_ffiVoid_closureTrampoline)
+ .cast();
+void _ObjCBlock_ffiVoid_listenerTrampoline(
+ ffi.Pointer<objc.ObjCBlockImpl> block,
+) {
+ (objc.getBlockClosure(block) as void Function())();
+ objc.objectRelease(block.cast());
+}
+
+ffi.NativeCallable<ffi.Void Function(ffi.Pointer<objc.ObjCBlockImpl>)>
+ _ObjCBlock_ffiVoid_listenerCallable = ffi.NativeCallable<
+ ffi.Void Function(ffi.Pointer<objc.ObjCBlockImpl>)>.listener(
+ _ObjCBlock_ffiVoid_listenerTrampoline)
+ ..keepIsolateAlive = false;
+void _ObjCBlock_ffiVoid_blockingTrampoline(
+ ffi.Pointer<objc.ObjCBlockImpl> block, ffi.Pointer<ffi.Void> waiter) {
+ try {
+ (objc.getBlockClosure(block) as void Function())();
+ } catch (e) {
+ } finally {
+ objc.signalWaiter(waiter);
+ objc.objectRelease(block.cast());
+ }
+}
+
+ffi.NativeCallable<
+ ffi.Void Function(
+ ffi.Pointer<objc.ObjCBlockImpl>, ffi.Pointer<ffi.Void>)>
+ _ObjCBlock_ffiVoid_blockingCallable = ffi.NativeCallable<
+ ffi.Void Function(ffi.Pointer<objc.ObjCBlockImpl>,
+ ffi.Pointer<ffi.Void>)>.isolateLocal(
+ _ObjCBlock_ffiVoid_blockingTrampoline)
+ ..keepIsolateAlive = false;
+ffi.NativeCallable<
+ ffi.Void Function(
+ ffi.Pointer<objc.ObjCBlockImpl>, ffi.Pointer<ffi.Void>)>
+ _ObjCBlock_ffiVoid_blockingListenerCallable = ffi.NativeCallable<
+ ffi.Void Function(ffi.Pointer<objc.ObjCBlockImpl>,
+ ffi.Pointer<ffi.Void>)>.listener(
+ _ObjCBlock_ffiVoid_blockingTrampoline)
+ ..keepIsolateAlive = false;
+
+/// Construction methods for `objc.ObjCBlock<ffi.Void Function()>`.
+abstract final class ObjCBlock_ffiVoid {
+ /// Returns a block that wraps the given raw block pointer.
+ static objc.ObjCBlock<ffi.Void Function()> castFromPointer(
+ ffi.Pointer<objc.ObjCBlockImpl> pointer,
+ {bool retain = false,
+ bool release = false}) =>
+ objc.ObjCBlock<ffi.Void Function()>(pointer,
+ retain: retain, release: release);
+
+ /// Creates a block from a C function pointer.
+ ///
+ /// This block must be invoked by native code running on the same thread as
+ /// the isolate that registered it. Invoking the block on the wrong thread
+ /// will result in a crash.
+ static objc.ObjCBlock<ffi.Void Function()> fromFunctionPointer(
+ ffi.Pointer<ffi.NativeFunction<ffi.Void Function()>> ptr) =>
+ objc.ObjCBlock<ffi.Void Function()>(
+ objc.newPointerBlock(_ObjCBlock_ffiVoid_fnPtrCallable, ptr.cast()),
+ retain: false,
+ release: true);
+
+ /// Creates a block from a Dart function.
+ ///
+ /// This block must be invoked by native code running on the same thread as
+ /// the isolate that registered it. Invoking the block on the wrong thread
+ /// will result in a crash.
+ ///
+ /// If `keepIsolateAlive` is true, this block will keep this isolate alive
+ /// until it is garbage collected by both Dart and ObjC.
+ static objc.ObjCBlock<ffi.Void Function()> fromFunction(void Function() fn,
+ {bool keepIsolateAlive = true}) =>
+ objc.ObjCBlock<ffi.Void Function()>(
+ objc.newClosureBlock(
+ _ObjCBlock_ffiVoid_closureCallable, () => fn(), keepIsolateAlive),
+ retain: false,
+ release: true);
+
+ /// Creates a listener block from a Dart function.
+ ///
+ /// This is based on FFI's NativeCallable.listener, and has the same
+ /// capabilities and limitations. This block can be invoked from any thread,
+ /// but only supports void functions, and is not run synchronously. See
+ /// NativeCallable.listener for more details.
+ ///
+ /// If `keepIsolateAlive` is true, this block will keep this isolate alive
+ /// until it is garbage collected by both Dart and ObjC.
+ static objc.ObjCBlock<ffi.Void Function()> listener(void Function() fn,
+ {bool keepIsolateAlive = true}) {
+ final raw = objc.newClosureBlock(
+ _ObjCBlock_ffiVoid_listenerCallable.nativeFunction.cast(),
+ () => fn(),
+ keepIsolateAlive);
+ final wrapper = _ObjectiveCBindings_wrapListenerBlock_1pl9qdv(raw);
+ objc.objectRelease(raw.cast());
+ return objc.ObjCBlock<ffi.Void Function()>(wrapper,
+ retain: false, release: true);
+ }
+
+ /// Creates a blocking block from a Dart function.
+ ///
+ /// This callback can be invoked from any native thread, and will block the
+ /// caller until the callback is handled by the Dart isolate that created
+ /// the block. Async functions are not supported.
+ ///
+ /// If `keepIsolateAlive` is true, this block will keep this isolate alive
+ /// until it is garbage collected by both Dart and ObjC. If the owner isolate
+ /// has shut down, and the block is invoked by native code, it may block
+ /// indefinitely, or have other undefined behavior.
+ static objc.ObjCBlock<ffi.Void Function()> blocking(void Function() fn,
+ {bool keepIsolateAlive = true}) {
+ final raw = objc.newClosureBlock(
+ _ObjCBlock_ffiVoid_blockingCallable.nativeFunction.cast(),
+ () => fn(),
+ keepIsolateAlive);
+ final rawListener = objc.newClosureBlock(
+ _ObjCBlock_ffiVoid_blockingListenerCallable.nativeFunction.cast(),
+ () => fn(),
+ keepIsolateAlive);
+ final wrapper = _ObjectiveCBindings_wrapBlockingBlock_1pl9qdv(
+ raw, rawListener, objc.objCContext);
+ objc.objectRelease(raw.cast());
+ objc.objectRelease(rawListener.cast());
+ return objc.ObjCBlock<ffi.Void Function()>(wrapper,
+ retain: false, release: true);
+ }
+}
+
+/// Call operator for `objc.ObjCBlock<ffi.Void Function()>`.
+extension ObjCBlock_ffiVoid_CallExtension
+ on objc.ObjCBlock<ffi.Void Function()> {
+ void call() => ref.pointer.ref.invoke
+ .cast<
+ ffi.NativeFunction<
+ ffi.Void Function(ffi.Pointer<objc.ObjCBlockImpl> block)>>()
+ .asFunction<void Function(ffi.Pointer<objc.ObjCBlockImpl>)>()(
+ ref.pointer,
+ );
+}
+
+void _ObjCBlock_ffiVoid_KeyType_ObjectType_bool_fnPtrTrampoline(
+ ffi.Pointer<objc.ObjCBlockImpl> block,
+ ffi.Pointer<objc.ObjCObject> arg0,
+ ffi.Pointer<objc.ObjCObject> arg1,
+ ffi.Pointer<ffi.Bool> arg2) =>
+ block.ref.target
+ .cast<
+ ffi.NativeFunction<
+ ffi.Void Function(
+ ffi.Pointer<objc.ObjCObject> arg0,
+ ffi.Pointer<objc.ObjCObject> arg1,
+ ffi.Pointer<ffi.Bool> arg2)>>()
+ .asFunction<
+ void Function(
+ ffi.Pointer<objc.ObjCObject>,
+ ffi.Pointer<objc.ObjCObject>,
+ ffi.Pointer<ffi.Bool>)>()(arg0, arg1, arg2);
+ffi.Pointer<ffi.Void> _ObjCBlock_ffiVoid_KeyType_ObjectType_bool_fnPtrCallable =
+ ffi.Pointer.fromFunction<
+ ffi.Void Function(
+ ffi.Pointer<objc.ObjCBlockImpl>,
+ ffi.Pointer<objc.ObjCObject>,
+ ffi.Pointer<objc.ObjCObject>,
+ ffi.Pointer<ffi.Bool>)>(
+ _ObjCBlock_ffiVoid_KeyType_ObjectType_bool_fnPtrTrampoline)
+ .cast();
+void _ObjCBlock_ffiVoid_KeyType_ObjectType_bool_closureTrampoline(
+ ffi.Pointer<objc.ObjCBlockImpl> block,
+ ffi.Pointer<objc.ObjCObject> arg0,
+ ffi.Pointer<objc.ObjCObject> arg1,
+ ffi.Pointer<ffi.Bool> arg2) =>
+ (objc.getBlockClosure(block) as void Function(ffi.Pointer<objc.ObjCObject>,
+ ffi.Pointer<objc.ObjCObject>, ffi.Pointer<ffi.Bool>))(arg0, arg1, arg2);
+ffi.Pointer<ffi.Void>
+ _ObjCBlock_ffiVoid_KeyType_ObjectType_bool_closureCallable =
+ ffi.Pointer.fromFunction<
+ ffi.Void Function(
+ ffi.Pointer<objc.ObjCBlockImpl>,
+ ffi.Pointer<objc.ObjCObject>,
+ ffi.Pointer<objc.ObjCObject>,
+ ffi.Pointer<ffi.Bool>)>(
+ _ObjCBlock_ffiVoid_KeyType_ObjectType_bool_closureTrampoline)
+ .cast();
+void _ObjCBlock_ffiVoid_KeyType_ObjectType_bool_listenerTrampoline(
+ ffi.Pointer<objc.ObjCBlockImpl> block,
+ ffi.Pointer<objc.ObjCObject> arg0,
+ ffi.Pointer<objc.ObjCObject> arg1,
+ ffi.Pointer<ffi.Bool> arg2) {
+ (objc.getBlockClosure(block) as void Function(ffi.Pointer<objc.ObjCObject>,
+ ffi.Pointer<objc.ObjCObject>, ffi.Pointer<ffi.Bool>))(arg0, arg1, arg2);
+ objc.objectRelease(block.cast());
+}
+
+ffi.NativeCallable<
+ ffi.Void Function(
+ ffi.Pointer<objc.ObjCBlockImpl>,
+ ffi.Pointer<objc.ObjCObject>,
+ ffi.Pointer<objc.ObjCObject>,
+ ffi.Pointer<ffi.Bool>)>
+ _ObjCBlock_ffiVoid_KeyType_ObjectType_bool_listenerCallable = ffi
+ .NativeCallable<
+ ffi.Void Function(
+ ffi.Pointer<objc.ObjCBlockImpl>,
+ ffi.Pointer<objc.ObjCObject>,
+ ffi.Pointer<objc.ObjCObject>,
+ ffi.Pointer<ffi.Bool>)>.listener(
+ _ObjCBlock_ffiVoid_KeyType_ObjectType_bool_listenerTrampoline)
+ ..keepIsolateAlive = false;
+void _ObjCBlock_ffiVoid_KeyType_ObjectType_bool_blockingTrampoline(
+ ffi.Pointer<objc.ObjCBlockImpl> block,
+ ffi.Pointer<ffi.Void> waiter,
+ ffi.Pointer<objc.ObjCObject> arg0,
+ ffi.Pointer<objc.ObjCObject> arg1,
+ ffi.Pointer<ffi.Bool> arg2) {
+ try {
+ (objc.getBlockClosure(block) as void Function(ffi.Pointer<objc.ObjCObject>,
+ ffi.Pointer<objc.ObjCObject>, ffi.Pointer<ffi.Bool>))(arg0, arg1, arg2);
+ } catch (e) {
+ } finally {
+ objc.signalWaiter(waiter);
+ objc.objectRelease(block.cast());
+ }
+}
+
+ffi.NativeCallable<
+ ffi.Void Function(
+ ffi.Pointer<objc.ObjCBlockImpl>,
+ ffi.Pointer<ffi.Void>,
+ ffi.Pointer<objc.ObjCObject>,
+ ffi.Pointer<objc.ObjCObject>,
+ ffi.Pointer<ffi.Bool>)>
+ _ObjCBlock_ffiVoid_KeyType_ObjectType_bool_blockingCallable = ffi
+ .NativeCallable<
+ ffi.Void Function(
+ ffi.Pointer<objc.ObjCBlockImpl>,
+ ffi.Pointer<ffi.Void>,
+ ffi.Pointer<objc.ObjCObject>,
+ ffi.Pointer<objc.ObjCObject>,
+ ffi.Pointer<ffi.Bool>)>.isolateLocal(
+ _ObjCBlock_ffiVoid_KeyType_ObjectType_bool_blockingTrampoline)
+ ..keepIsolateAlive = false;
+ffi.NativeCallable<
+ ffi.Void Function(
+ ffi.Pointer<objc.ObjCBlockImpl>,
+ ffi.Pointer<ffi.Void>,
+ ffi.Pointer<objc.ObjCObject>,
+ ffi.Pointer<objc.ObjCObject>,
+ ffi.Pointer<ffi.Bool>)>
+ _ObjCBlock_ffiVoid_KeyType_ObjectType_bool_blockingListenerCallable = ffi
+ .NativeCallable<
+ ffi.Void Function(
+ ffi.Pointer<objc.ObjCBlockImpl>,
+ ffi.Pointer<ffi.Void>,
+ ffi.Pointer<objc.ObjCObject>,
+ ffi.Pointer<objc.ObjCObject>,
+ ffi.Pointer<ffi.Bool>)>.listener(
+ _ObjCBlock_ffiVoid_KeyType_ObjectType_bool_blockingTrampoline)
+ ..keepIsolateAlive = false;
+
+/// Construction methods for `objc.ObjCBlock<ffi.Void Function(ffi.Pointer<objc.ObjCObject>, ffi.Pointer<objc.ObjCObject>, ffi.Pointer<ffi.Bool>)>`.
+abstract final class ObjCBlock_ffiVoid_KeyType_ObjectType_bool {
+ /// Returns a block that wraps the given raw block pointer.
+ static objc.ObjCBlock<
+ ffi.Void Function(ffi.Pointer<objc.ObjCObject>,
+ ffi.Pointer<objc.ObjCObject>, ffi.Pointer<ffi.Bool>)>
+ castFromPointer(ffi.Pointer<objc.ObjCBlockImpl> pointer,
+ {bool retain = false, bool release = false}) =>
+ objc.ObjCBlock<
+ ffi.Void Function(
+ ffi.Pointer<objc.ObjCObject>,
+ ffi.Pointer<objc.ObjCObject>,
+ ffi.Pointer<ffi.Bool>)>(pointer,
+ retain: retain, release: release);
+
+ /// Creates a block from a C function pointer.
+ ///
+ /// This block must be invoked by native code running on the same thread as
+ /// the isolate that registered it. Invoking the block on the wrong thread
+ /// will result in a crash.
+ static objc.ObjCBlock<
+ ffi.Void Function(ffi.Pointer<objc.ObjCObject>,
+ ffi.Pointer<objc.ObjCObject>, ffi.Pointer<ffi.Bool>)>
+ fromFunctionPointer(ffi.Pointer<ffi.NativeFunction<ffi.Void Function(ffi.Pointer<objc.ObjCObject> arg0, ffi.Pointer<objc.ObjCObject> arg1, ffi.Pointer<ffi.Bool> arg2)>> ptr) =>
+ objc.ObjCBlock<
+ ffi.Void Function(ffi.Pointer<objc.ObjCObject>,
+ ffi.Pointer<objc.ObjCObject>, ffi.Pointer<ffi.Bool>)>(
+ objc.newPointerBlock(_ObjCBlock_ffiVoid_KeyType_ObjectType_bool_fnPtrCallable, ptr.cast()),
+ retain: false,
+ release: true);
+
+ /// Creates a block from a Dart function.
+ ///
+ /// This block must be invoked by native code running on the same thread as
+ /// the isolate that registered it. Invoking the block on the wrong thread
+ /// will result in a crash.
+ ///
+ /// If `keepIsolateAlive` is true, this block will keep this isolate alive
+ /// until it is garbage collected by both Dart and ObjC.
+ static objc.ObjCBlock<ffi.Void Function(ffi.Pointer<objc.ObjCObject>, ffi.Pointer<objc.ObjCObject>, ffi.Pointer<ffi.Bool>)>
+ fromFunction(void Function(objc.ObjCObjectBase, objc.ObjCObjectBase, ffi.Pointer<ffi.Bool>) fn,
+ {bool keepIsolateAlive = true}) =>
+ objc.ObjCBlock<ffi.Void Function(ffi.Pointer<objc.ObjCObject>, ffi.Pointer<objc.ObjCObject>, ffi.Pointer<ffi.Bool>)>(
+ objc.newClosureBlock(
+ _ObjCBlock_ffiVoid_KeyType_ObjectType_bool_closureCallable,
+ (ffi.Pointer<objc.ObjCObject> arg0, ffi.Pointer<objc.ObjCObject> arg1, ffi.Pointer<ffi.Bool> arg2) => fn(
+ objc.ObjCObjectBase(arg0, retain: true, release: true),
+ objc.ObjCObjectBase(arg1, retain: true, release: true),
+ arg2),
+ keepIsolateAlive),
+ retain: false,
+ release: true);
+
+ /// Creates a listener block from a Dart function.
+ ///
+ /// This is based on FFI's NativeCallable.listener, and has the same
+ /// capabilities and limitations. This block can be invoked from any thread,
+ /// but only supports void functions, and is not run synchronously. See
+ /// NativeCallable.listener for more details.
+ ///
+ /// If `keepIsolateAlive` is true, this block will keep this isolate alive
+ /// until it is garbage collected by both Dart and ObjC.
+ static objc.ObjCBlock<
+ ffi.Void Function(ffi.Pointer<objc.ObjCObject>,
+ ffi.Pointer<objc.ObjCObject>, ffi.Pointer<ffi.Bool>)> listener(
+ void Function(
+ objc.ObjCObjectBase, objc.ObjCObjectBase, ffi.Pointer<ffi.Bool>)
+ fn,
+ {bool keepIsolateAlive = true}) {
+ final raw = objc.newClosureBlock(
+ _ObjCBlock_ffiVoid_KeyType_ObjectType_bool_listenerCallable
+ .nativeFunction
+ .cast(),
+ (ffi.Pointer<objc.ObjCObject> arg0, ffi.Pointer<objc.ObjCObject> arg1,
+ ffi.Pointer<ffi.Bool> arg2) =>
+ fn(objc.ObjCObjectBase(arg0, retain: false, release: true),
+ objc.ObjCObjectBase(arg1, retain: false, release: true), arg2),
+ keepIsolateAlive);
+ final wrapper = _ObjectiveCBindings_wrapListenerBlock_1o83rbn(raw);
+ objc.objectRelease(raw.cast());
+ return objc.ObjCBlock<
+ ffi.Void Function(
+ ffi.Pointer<objc.ObjCObject>,
+ ffi.Pointer<objc.ObjCObject>,
+ ffi.Pointer<ffi.Bool>)>(wrapper, retain: false, release: true);
+ }
+
+ /// Creates a blocking block from a Dart function.
+ ///
+ /// This callback can be invoked from any native thread, and will block the
+ /// caller until the callback is handled by the Dart isolate that created
+ /// the block. Async functions are not supported.
+ ///
+ /// If `keepIsolateAlive` is true, this block will keep this isolate alive
+ /// until it is garbage collected by both Dart and ObjC. If the owner isolate
+ /// has shut down, and the block is invoked by native code, it may block
+ /// indefinitely, or have other undefined behavior.
+ static objc.ObjCBlock<
+ ffi.Void Function(ffi.Pointer<objc.ObjCObject>,
+ ffi.Pointer<objc.ObjCObject>, ffi.Pointer<ffi.Bool>)> blocking(
+ void Function(
+ objc.ObjCObjectBase, objc.ObjCObjectBase, ffi.Pointer<ffi.Bool>)
+ fn,
+ {bool keepIsolateAlive = true}) {
+ final raw = objc.newClosureBlock(
+ _ObjCBlock_ffiVoid_KeyType_ObjectType_bool_blockingCallable
+ .nativeFunction
+ .cast(),
+ (ffi.Pointer<objc.ObjCObject> arg0, ffi.Pointer<objc.ObjCObject> arg1,
+ ffi.Pointer<ffi.Bool> arg2) =>
+ fn(objc.ObjCObjectBase(arg0, retain: false, release: true),
+ objc.ObjCObjectBase(arg1, retain: false, release: true), arg2),
+ keepIsolateAlive);
+ final rawListener = objc.newClosureBlock(
+ _ObjCBlock_ffiVoid_KeyType_ObjectType_bool_blockingListenerCallable
+ .nativeFunction
+ .cast(),
+ (ffi.Pointer<objc.ObjCObject> arg0, ffi.Pointer<objc.ObjCObject> arg1,
+ ffi.Pointer<ffi.Bool> arg2) =>
+ fn(objc.ObjCObjectBase(arg0, retain: false, release: true),
+ objc.ObjCObjectBase(arg1, retain: false, release: true), arg2),
+ keepIsolateAlive);
+ final wrapper = _ObjectiveCBindings_wrapBlockingBlock_1o83rbn(
+ raw, rawListener, objc.objCContext);
+ objc.objectRelease(raw.cast());
+ objc.objectRelease(rawListener.cast());
+ return objc.ObjCBlock<
+ ffi.Void Function(
+ ffi.Pointer<objc.ObjCObject>,
+ ffi.Pointer<objc.ObjCObject>,
+ ffi.Pointer<ffi.Bool>)>(wrapper, retain: false, release: true);
+ }
+}
+
+/// Call operator for `objc.ObjCBlock<ffi.Void Function(ffi.Pointer<objc.ObjCObject>, ffi.Pointer<objc.ObjCObject>, ffi.Pointer<ffi.Bool>)>`.
+extension ObjCBlock_ffiVoid_KeyType_ObjectType_bool_CallExtension
+ on objc.ObjCBlock<
+ ffi.Void Function(ffi.Pointer<objc.ObjCObject>,
+ ffi.Pointer<objc.ObjCObject>, ffi.Pointer<ffi.Bool>)> {
+ void call(objc.ObjCObjectBase arg0, objc.ObjCObjectBase arg1,
+ ffi.Pointer<ffi.Bool> arg2) =>
+ ref.pointer.ref.invoke
+ .cast<
+ ffi.NativeFunction<
+ ffi.Void Function(
+ ffi.Pointer<objc.ObjCBlockImpl> block,
+ ffi.Pointer<objc.ObjCObject> arg0,
+ ffi.Pointer<objc.ObjCObject> arg1,
+ ffi.Pointer<ffi.Bool> arg2)>>()
+ .asFunction<
+ void Function(
+ ffi.Pointer<objc.ObjCBlockImpl>,
+ ffi.Pointer<objc.ObjCObject>,
+ ffi.Pointer<objc.ObjCObject>,
+ ffi.Pointer<ffi.Bool>)>()(
+ ref.pointer, arg0.ref.pointer, arg1.ref.pointer, arg2);
+}
+
+void _ObjCBlock_ffiVoid_NSData_NSError_fnPtrTrampoline(
+ ffi.Pointer<objc.ObjCBlockImpl> block,
+ ffi.Pointer<objc.ObjCObject> arg0,
+ ffi.Pointer<objc.ObjCObject> arg1) =>
+ block.ref.target
+ .cast<
+ ffi.NativeFunction<
+ ffi.Void Function(ffi.Pointer<objc.ObjCObject> arg0,
+ ffi.Pointer<objc.ObjCObject> arg1)>>()
+ .asFunction<
+ void Function(ffi.Pointer<objc.ObjCObject>,
+ ffi.Pointer<objc.ObjCObject>)>()(arg0, arg1);
+ffi.Pointer<ffi.Void> _ObjCBlock_ffiVoid_NSData_NSError_fnPtrCallable =
+ ffi.Pointer.fromFunction<
+ ffi.Void Function(
+ ffi.Pointer<objc.ObjCBlockImpl>,
+ ffi.Pointer<objc.ObjCObject>,
+ ffi.Pointer<objc.ObjCObject>)>(
+ _ObjCBlock_ffiVoid_NSData_NSError_fnPtrTrampoline)
+ .cast();
+void _ObjCBlock_ffiVoid_NSData_NSError_closureTrampoline(
+ ffi.Pointer<objc.ObjCBlockImpl> block,
+ ffi.Pointer<objc.ObjCObject> arg0,
+ ffi.Pointer<objc.ObjCObject> arg1) =>
+ (objc.getBlockClosure(block) as void Function(ffi.Pointer<objc.ObjCObject>,
+ ffi.Pointer<objc.ObjCObject>))(arg0, arg1);
+ffi.Pointer<ffi.Void> _ObjCBlock_ffiVoid_NSData_NSError_closureCallable =
+ ffi.Pointer.fromFunction<
+ ffi.Void Function(
+ ffi.Pointer<objc.ObjCBlockImpl>,
+ ffi.Pointer<objc.ObjCObject>,
+ ffi.Pointer<objc.ObjCObject>)>(
+ _ObjCBlock_ffiVoid_NSData_NSError_closureTrampoline)
+ .cast();
+void _ObjCBlock_ffiVoid_NSData_NSError_listenerTrampoline(
+ ffi.Pointer<objc.ObjCBlockImpl> block,
+ ffi.Pointer<objc.ObjCObject> arg0,
+ ffi.Pointer<objc.ObjCObject> arg1) {
+ (objc.getBlockClosure(block) as void Function(
+ ffi.Pointer<objc.ObjCObject>, ffi.Pointer<objc.ObjCObject>))(arg0, arg1);
+ objc.objectRelease(block.cast());
+}
+
+ffi.NativeCallable<
+ ffi.Void Function(ffi.Pointer<objc.ObjCBlockImpl>,
+ ffi.Pointer<objc.ObjCObject>, ffi.Pointer<objc.ObjCObject>)>
+ _ObjCBlock_ffiVoid_NSData_NSError_listenerCallable = ffi.NativeCallable<
+ ffi.Void Function(
+ ffi.Pointer<objc.ObjCBlockImpl>,
+ ffi.Pointer<objc.ObjCObject>,
+ ffi.Pointer<objc.ObjCObject>)>.listener(
+ _ObjCBlock_ffiVoid_NSData_NSError_listenerTrampoline)
+ ..keepIsolateAlive = false;
+void _ObjCBlock_ffiVoid_NSData_NSError_blockingTrampoline(
+ ffi.Pointer<objc.ObjCBlockImpl> block,
+ ffi.Pointer<ffi.Void> waiter,
+ ffi.Pointer<objc.ObjCObject> arg0,
+ ffi.Pointer<objc.ObjCObject> arg1) {
+ try {
+ (objc.getBlockClosure(block) as void Function(ffi.Pointer<objc.ObjCObject>,
+ ffi.Pointer<objc.ObjCObject>))(arg0, arg1);
+ } catch (e) {
+ } finally {
+ objc.signalWaiter(waiter);
+ objc.objectRelease(block.cast());
+ }
+}
+
+ffi.NativeCallable<
+ ffi.Void Function(
+ ffi.Pointer<objc.ObjCBlockImpl>,
+ ffi.Pointer<ffi.Void>,
+ ffi.Pointer<objc.ObjCObject>,
+ ffi.Pointer<objc.ObjCObject>)>
+ _ObjCBlock_ffiVoid_NSData_NSError_blockingCallable = ffi.NativeCallable<
+ ffi.Void Function(
+ ffi.Pointer<objc.ObjCBlockImpl>,
+ ffi.Pointer<ffi.Void>,
+ ffi.Pointer<objc.ObjCObject>,
+ ffi.Pointer<objc.ObjCObject>)>.isolateLocal(
+ _ObjCBlock_ffiVoid_NSData_NSError_blockingTrampoline)
+ ..keepIsolateAlive = false;
+ffi.NativeCallable<
+ ffi.Void Function(
+ ffi.Pointer<objc.ObjCBlockImpl>,
+ ffi.Pointer<ffi.Void>,
+ ffi.Pointer<objc.ObjCObject>,
+ ffi.Pointer<objc.ObjCObject>)>
+ _ObjCBlock_ffiVoid_NSData_NSError_blockingListenerCallable = ffi
+ .NativeCallable<
+ ffi.Void Function(
+ ffi.Pointer<objc.ObjCBlockImpl>,
+ ffi.Pointer<ffi.Void>,
+ ffi.Pointer<objc.ObjCObject>,
+ ffi.Pointer<objc.ObjCObject>)>.listener(
+ _ObjCBlock_ffiVoid_NSData_NSError_blockingTrampoline)
+ ..keepIsolateAlive = false;
+
+/// Construction methods for `objc.ObjCBlock<ffi.Void Function(NSData?, NSError?)>`.
+abstract final class ObjCBlock_ffiVoid_NSData_NSError {
+ /// Returns a block that wraps the given raw block pointer.
+ static objc.ObjCBlock<ffi.Void Function(NSData?, NSError?)> castFromPointer(
+ ffi.Pointer<objc.ObjCBlockImpl> pointer,
+ {bool retain = false,
+ bool release = false}) =>
+ objc.ObjCBlock<ffi.Void Function(NSData?, NSError?)>(pointer,
+ retain: retain, release: release);
+
+ /// Creates a block from a C function pointer.
+ ///
+ /// This block must be invoked by native code running on the same thread as
+ /// the isolate that registered it. Invoking the block on the wrong thread
+ /// will result in a crash.
+ static objc.ObjCBlock<ffi.Void Function(NSData?, NSError?)> fromFunctionPointer(
+ ffi.Pointer<
+ ffi.NativeFunction<
+ ffi.Void Function(ffi.Pointer<objc.ObjCObject> arg0,
+ ffi.Pointer<objc.ObjCObject> arg1)>>
+ ptr) =>
+ objc.ObjCBlock<ffi.Void Function(NSData?, NSError?)>(
+ objc.newPointerBlock(_ObjCBlock_ffiVoid_NSData_NSError_fnPtrCallable, ptr.cast()),
+ retain: false,
+ release: true);
+
+ /// Creates a block from a Dart function.
+ ///
+ /// This block must be invoked by native code running on the same thread as
+ /// the isolate that registered it. Invoking the block on the wrong thread
+ /// will result in a crash.
+ ///
+ /// If `keepIsolateAlive` is true, this block will keep this isolate alive
+ /// until it is garbage collected by both Dart and ObjC.
+ static objc.ObjCBlock<ffi.Void Function(NSData?, NSError?)> fromFunction(
+ void Function(NSData?, NSError?) fn,
+ {bool keepIsolateAlive = true}) =>
+ objc.ObjCBlock<ffi.Void Function(NSData?, NSError?)>(
+ objc.newClosureBlock(
+ _ObjCBlock_ffiVoid_NSData_NSError_closureCallable,
+ (ffi.Pointer<objc.ObjCObject> arg0, ffi.Pointer<objc.ObjCObject> arg1) => fn(
+ arg0.address == 0
+ ? null
+ : NSData.castFromPointer(arg0, retain: true, release: true),
+ arg1.address == 0 ? null : NSError.castFromPointer(arg1, retain: true, release: true)),
+ keepIsolateAlive),
+ retain: false,
+ release: true);
+
+ /// Creates a listener block from a Dart function.
+ ///
+ /// This is based on FFI's NativeCallable.listener, and has the same
+ /// capabilities and limitations. This block can be invoked from any thread,
+ /// but only supports void functions, and is not run synchronously. See
+ /// NativeCallable.listener for more details.
+ ///
+ /// If `keepIsolateAlive` is true, this block will keep this isolate alive
+ /// until it is garbage collected by both Dart and ObjC.
+ static objc.ObjCBlock<ffi.Void Function(NSData?, NSError?)> listener(
+ void Function(NSData?, NSError?) fn,
+ {bool keepIsolateAlive = true}) {
+ final raw = objc.newClosureBlock(
+ _ObjCBlock_ffiVoid_NSData_NSError_listenerCallable.nativeFunction
+ .cast(),
+ (ffi.Pointer<objc.ObjCObject> arg0,
+ ffi.Pointer<objc.ObjCObject> arg1) =>
+ fn(
+ arg0.address == 0
+ ? null
+ : NSData.castFromPointer(arg0,
+ retain: false, release: true),
+ arg1.address == 0
+ ? null
+ : NSError.castFromPointer(arg1,
+ retain: false, release: true)),
+ keepIsolateAlive);
+ final wrapper = _ObjectiveCBindings_wrapListenerBlock_pfv6jd(raw);
+ objc.objectRelease(raw.cast());
+ return objc.ObjCBlock<ffi.Void Function(NSData?, NSError?)>(wrapper,
+ retain: false, release: true);
+ }
+
+ /// Creates a blocking block from a Dart function.
+ ///
+ /// This callback can be invoked from any native thread, and will block the
+ /// caller until the callback is handled by the Dart isolate that created
+ /// the block. Async functions are not supported.
+ ///
+ /// If `keepIsolateAlive` is true, this block will keep this isolate alive
+ /// until it is garbage collected by both Dart and ObjC. If the owner isolate
+ /// has shut down, and the block is invoked by native code, it may block
+ /// indefinitely, or have other undefined behavior.
+ static objc.ObjCBlock<ffi.Void Function(NSData?, NSError?)> blocking(
+ void Function(NSData?, NSError?) fn,
+ {bool keepIsolateAlive = true}) {
+ final raw = objc.newClosureBlock(
+ _ObjCBlock_ffiVoid_NSData_NSError_blockingCallable.nativeFunction
+ .cast(),
+ (ffi.Pointer<objc.ObjCObject> arg0,
+ ffi.Pointer<objc.ObjCObject> arg1) =>
+ fn(
+ arg0.address == 0
+ ? null
+ : NSData.castFromPointer(arg0,
+ retain: false, release: true),
+ arg1.address == 0
+ ? null
+ : NSError.castFromPointer(arg1,
+ retain: false, release: true)),
+ keepIsolateAlive);
+ final rawListener = objc.newClosureBlock(
+ _ObjCBlock_ffiVoid_NSData_NSError_blockingListenerCallable
+ .nativeFunction
+ .cast(),
+ (ffi.Pointer<objc.ObjCObject> arg0,
+ ffi.Pointer<objc.ObjCObject> arg1) =>
+ fn(
+ arg0.address == 0
+ ? null
+ : NSData.castFromPointer(arg0,
+ retain: false, release: true),
+ arg1.address == 0
+ ? null
+ : NSError.castFromPointer(arg1,
+ retain: false, release: true)),
+ keepIsolateAlive);
+ final wrapper = _ObjectiveCBindings_wrapBlockingBlock_pfv6jd(
+ raw, rawListener, objc.objCContext);
+ objc.objectRelease(raw.cast());
+ objc.objectRelease(rawListener.cast());
+ return objc.ObjCBlock<ffi.Void Function(NSData?, NSError?)>(wrapper,
+ retain: false, release: true);
+ }
+}
+
+/// Call operator for `objc.ObjCBlock<ffi.Void Function(NSData?, NSError?)>`.
+extension ObjCBlock_ffiVoid_NSData_NSError_CallExtension
+ on objc.ObjCBlock<ffi.Void Function(NSData?, NSError?)> {
+ void call(NSData? arg0, NSError? arg1) => ref.pointer.ref.invoke
+ .cast<
+ ffi.NativeFunction<
+ ffi.Void Function(
+ ffi.Pointer<objc.ObjCBlockImpl> block,
+ ffi.Pointer<objc.ObjCObject> arg0,
+ ffi.Pointer<objc.ObjCObject> arg1)>>()
+ .asFunction<
+ void Function(
+ ffi.Pointer<objc.ObjCBlockImpl>,
+ ffi.Pointer<objc.ObjCObject>,
+ ffi.Pointer<objc.ObjCObject>)>()(ref.pointer,
+ arg0?.ref.pointer ?? ffi.nullptr, arg1?.ref.pointer ?? ffi.nullptr);
+}
+
void
_ObjCBlock_ffiVoid_NSItemProviderCompletionHandler_objcObjCObject_NSDictionary_fnPtrTrampoline(
ffi.Pointer<objc.ObjCBlockImpl> block,
@@ -14956,6 +18396,2408 @@
ref.pointer, arg0.ref.pointer, arg1.ref.pointer, arg2.ref.pointer);
}
+void _ObjCBlock_ffiVoid_NSObject_objcObjCObject_objcObjCObject_fnPtrTrampoline(
+ ffi.Pointer<objc.ObjCBlockImpl> block,
+ ffi.Pointer<objc.ObjCObject> arg0,
+ ffi.Pointer<objc.ObjCObject> arg1,
+ ffi.Pointer<objc.ObjCObject> arg2) =>
+ block.ref.target
+ .cast<
+ ffi.NativeFunction<
+ ffi.Void Function(
+ ffi.Pointer<objc.ObjCObject> arg0,
+ ffi.Pointer<objc.ObjCObject> arg1,
+ ffi.Pointer<objc.ObjCObject> arg2)>>()
+ .asFunction<
+ void Function(
+ ffi.Pointer<objc.ObjCObject>,
+ ffi.Pointer<objc.ObjCObject>,
+ ffi.Pointer<objc.ObjCObject>)>()(arg0, arg1, arg2);
+ffi.Pointer<ffi.Void>
+ _ObjCBlock_ffiVoid_NSObject_objcObjCObject_objcObjCObject_fnPtrCallable =
+ ffi.Pointer.fromFunction<
+ ffi.Void Function(
+ ffi.Pointer<objc.ObjCBlockImpl>,
+ ffi.Pointer<objc.ObjCObject>,
+ ffi.Pointer<objc.ObjCObject>,
+ ffi.Pointer<objc.ObjCObject>)>(
+ _ObjCBlock_ffiVoid_NSObject_objcObjCObject_objcObjCObject_fnPtrTrampoline)
+ .cast();
+void
+ _ObjCBlock_ffiVoid_NSObject_objcObjCObject_objcObjCObject_closureTrampoline(
+ ffi.Pointer<objc.ObjCBlockImpl> block,
+ ffi.Pointer<objc.ObjCObject> arg0,
+ ffi.Pointer<objc.ObjCObject> arg1,
+ ffi.Pointer<objc.ObjCObject> arg2) =>
+ (objc.getBlockClosure(block) as void Function(
+ ffi.Pointer<objc.ObjCObject>,
+ ffi.Pointer<objc.ObjCObject>,
+ ffi.Pointer<objc.ObjCObject>))(arg0, arg1, arg2);
+ffi.Pointer<ffi.Void>
+ _ObjCBlock_ffiVoid_NSObject_objcObjCObject_objcObjCObject_closureCallable =
+ ffi.Pointer.fromFunction<
+ ffi.Void Function(
+ ffi.Pointer<objc.ObjCBlockImpl>,
+ ffi.Pointer<objc.ObjCObject>,
+ ffi.Pointer<objc.ObjCObject>,
+ ffi.Pointer<objc.ObjCObject>)>(
+ _ObjCBlock_ffiVoid_NSObject_objcObjCObject_objcObjCObject_closureTrampoline)
+ .cast();
+void
+ _ObjCBlock_ffiVoid_NSObject_objcObjCObject_objcObjCObject_listenerTrampoline(
+ ffi.Pointer<objc.ObjCBlockImpl> block,
+ ffi.Pointer<objc.ObjCObject> arg0,
+ ffi.Pointer<objc.ObjCObject> arg1,
+ ffi.Pointer<objc.ObjCObject> arg2) {
+ (objc.getBlockClosure(block) as void Function(
+ ffi.Pointer<objc.ObjCObject>,
+ ffi.Pointer<objc.ObjCObject>,
+ ffi.Pointer<objc.ObjCObject>))(arg0, arg1, arg2);
+ objc.objectRelease(block.cast());
+}
+
+ffi.NativeCallable<
+ ffi.Void Function(
+ ffi.Pointer<objc.ObjCBlockImpl>,
+ ffi.Pointer<objc.ObjCObject>,
+ ffi.Pointer<objc.ObjCObject>,
+ ffi.Pointer<objc.ObjCObject>)>
+ _ObjCBlock_ffiVoid_NSObject_objcObjCObject_objcObjCObject_listenerCallable =
+ ffi.NativeCallable<
+ ffi.Void Function(
+ ffi.Pointer<objc.ObjCBlockImpl>,
+ ffi.Pointer<objc.ObjCObject>,
+ ffi.Pointer<objc.ObjCObject>,
+ ffi.Pointer<objc.ObjCObject>)>.listener(
+ _ObjCBlock_ffiVoid_NSObject_objcObjCObject_objcObjCObject_listenerTrampoline)
+ ..keepIsolateAlive = false;
+void
+ _ObjCBlock_ffiVoid_NSObject_objcObjCObject_objcObjCObject_blockingTrampoline(
+ ffi.Pointer<objc.ObjCBlockImpl> block,
+ ffi.Pointer<ffi.Void> waiter,
+ ffi.Pointer<objc.ObjCObject> arg0,
+ ffi.Pointer<objc.ObjCObject> arg1,
+ ffi.Pointer<objc.ObjCObject> arg2) {
+ try {
+ (objc.getBlockClosure(block) as void Function(
+ ffi.Pointer<objc.ObjCObject>,
+ ffi.Pointer<objc.ObjCObject>,
+ ffi.Pointer<objc.ObjCObject>))(arg0, arg1, arg2);
+ } catch (e) {
+ } finally {
+ objc.signalWaiter(waiter);
+ objc.objectRelease(block.cast());
+ }
+}
+
+ffi.NativeCallable<
+ ffi.Void Function(
+ ffi.Pointer<objc.ObjCBlockImpl>,
+ ffi.Pointer<ffi.Void>,
+ ffi.Pointer<objc.ObjCObject>,
+ ffi.Pointer<objc.ObjCObject>,
+ ffi.Pointer<objc.ObjCObject>)>
+ _ObjCBlock_ffiVoid_NSObject_objcObjCObject_objcObjCObject_blockingCallable =
+ ffi.NativeCallable<
+ ffi.Void Function(
+ ffi.Pointer<objc.ObjCBlockImpl>,
+ ffi.Pointer<ffi.Void>,
+ ffi.Pointer<objc.ObjCObject>,
+ ffi.Pointer<objc.ObjCObject>,
+ ffi.Pointer<objc.ObjCObject>)>.isolateLocal(
+ _ObjCBlock_ffiVoid_NSObject_objcObjCObject_objcObjCObject_blockingTrampoline)
+ ..keepIsolateAlive = false;
+ffi.NativeCallable<
+ ffi.Void Function(
+ ffi.Pointer<objc.ObjCBlockImpl>,
+ ffi.Pointer<ffi.Void>,
+ ffi.Pointer<objc.ObjCObject>,
+ ffi.Pointer<objc.ObjCObject>,
+ ffi.Pointer<objc.ObjCObject>)>
+ _ObjCBlock_ffiVoid_NSObject_objcObjCObject_objcObjCObject_blockingListenerCallable =
+ ffi.NativeCallable<
+ ffi.Void Function(
+ ffi.Pointer<objc.ObjCBlockImpl>,
+ ffi.Pointer<ffi.Void>,
+ ffi.Pointer<objc.ObjCObject>,
+ ffi.Pointer<objc.ObjCObject>,
+ ffi.Pointer<objc.ObjCObject>)>.listener(
+ _ObjCBlock_ffiVoid_NSObject_objcObjCObject_objcObjCObject_blockingTrampoline)
+ ..keepIsolateAlive = false;
+
+/// Construction methods for `objc.ObjCBlock<ffi.Void Function(NSObject, ffi.Pointer<objc.ObjCObject>, ffi.Pointer<objc.ObjCObject>)>`.
+abstract final class ObjCBlock_ffiVoid_NSObject_objcObjCObject_objcObjCObject {
+ /// Returns a block that wraps the given raw block pointer.
+ static objc.ObjCBlock<
+ ffi.Void Function(NSObject, ffi.Pointer<objc.ObjCObject>,
+ ffi.Pointer<objc.ObjCObject>)>
+ castFromPointer(ffi.Pointer<objc.ObjCBlockImpl> pointer,
+ {bool retain = false, bool release = false}) =>
+ objc.ObjCBlock<
+ ffi.Void Function(NSObject, ffi.Pointer<objc.ObjCObject>,
+ ffi.Pointer<objc.ObjCObject>)>(pointer,
+ retain: retain, release: release);
+
+ /// Creates a block from a C function pointer.
+ ///
+ /// This block must be invoked by native code running on the same thread as
+ /// the isolate that registered it. Invoking the block on the wrong thread
+ /// will result in a crash.
+ static objc
+ .ObjCBlock<ffi.Void Function(NSObject, ffi.Pointer<objc.ObjCObject>, ffi.Pointer<objc.ObjCObject>)>
+ fromFunctionPointer(ffi.Pointer<ffi.NativeFunction<ffi.Void Function(ffi.Pointer<objc.ObjCObject> arg0, ffi.Pointer<objc.ObjCObject> arg1, ffi.Pointer<objc.ObjCObject> arg2)>> ptr) =>
+ objc.ObjCBlock<
+ ffi.Void Function(NSObject, ffi.Pointer<objc.ObjCObject>,
+ ffi.Pointer<objc.ObjCObject>)>(
+ objc.newPointerBlock(
+ _ObjCBlock_ffiVoid_NSObject_objcObjCObject_objcObjCObject_fnPtrCallable,
+ ptr.cast()),
+ retain: false,
+ release: true);
+
+ /// Creates a block from a Dart function.
+ ///
+ /// This block must be invoked by native code running on the same thread as
+ /// the isolate that registered it. Invoking the block on the wrong thread
+ /// will result in a crash.
+ ///
+ /// If `keepIsolateAlive` is true, this block will keep this isolate alive
+ /// until it is garbage collected by both Dart and ObjC.
+ static objc.ObjCBlock<ffi.Void Function(NSObject, ffi.Pointer<objc.ObjCObject>, ffi.Pointer<objc.ObjCObject>)> fromFunction(
+ void Function(NSObject, objc.ObjCObjectBase, objc.ObjCObjectBase) fn,
+ {bool keepIsolateAlive = true}) =>
+ objc.ObjCBlock<ffi.Void Function(NSObject, ffi.Pointer<objc.ObjCObject>, ffi.Pointer<objc.ObjCObject>)>(
+ objc.newClosureBlock(
+ _ObjCBlock_ffiVoid_NSObject_objcObjCObject_objcObjCObject_closureCallable,
+ (ffi.Pointer<objc.ObjCObject> arg0, ffi.Pointer<objc.ObjCObject> arg1, ffi.Pointer<objc.ObjCObject> arg2) =>
+ fn(
+ NSObject.castFromPointer(arg0, retain: true, release: true),
+ objc.ObjCObjectBase(arg1, retain: true, release: true),
+ objc.ObjCObjectBase(arg2, retain: true, release: true)),
+ keepIsolateAlive),
+ retain: false,
+ release: true);
+
+ /// Creates a listener block from a Dart function.
+ ///
+ /// This is based on FFI's NativeCallable.listener, and has the same
+ /// capabilities and limitations. This block can be invoked from any thread,
+ /// but only supports void functions, and is not run synchronously. See
+ /// NativeCallable.listener for more details.
+ ///
+ /// If `keepIsolateAlive` is true, this block will keep this isolate alive
+ /// until it is garbage collected by both Dart and ObjC.
+ static objc.ObjCBlock<
+ ffi.Void Function(NSObject, ffi.Pointer<objc.ObjCObject>,
+ ffi.Pointer<objc.ObjCObject>)> listener(
+ void Function(NSObject, objc.ObjCObjectBase, objc.ObjCObjectBase) fn,
+ {bool keepIsolateAlive = true}) {
+ final raw = objc.newClosureBlock(
+ _ObjCBlock_ffiVoid_NSObject_objcObjCObject_objcObjCObject_listenerCallable
+ .nativeFunction
+ .cast(),
+ (ffi.Pointer<objc.ObjCObject> arg0, ffi.Pointer<objc.ObjCObject> arg1,
+ ffi.Pointer<objc.ObjCObject> arg2) =>
+ fn(
+ NSObject.castFromPointer(arg0, retain: false, release: true),
+ objc.ObjCObjectBase(arg1, retain: false, release: true),
+ objc.ObjCObjectBase(arg2, retain: false, release: true)),
+ keepIsolateAlive);
+ final wrapper = _ObjectiveCBindings_wrapListenerBlock_r8gdi7(raw);
+ objc.objectRelease(raw.cast());
+ return objc.ObjCBlock<
+ ffi.Void Function(NSObject, ffi.Pointer<objc.ObjCObject>,
+ ffi.Pointer<objc.ObjCObject>)>(wrapper,
+ retain: false, release: true);
+ }
+
+ /// Creates a blocking block from a Dart function.
+ ///
+ /// This callback can be invoked from any native thread, and will block the
+ /// caller until the callback is handled by the Dart isolate that created
+ /// the block. Async functions are not supported.
+ ///
+ /// If `keepIsolateAlive` is true, this block will keep this isolate alive
+ /// until it is garbage collected by both Dart and ObjC. If the owner isolate
+ /// has shut down, and the block is invoked by native code, it may block
+ /// indefinitely, or have other undefined behavior.
+ static objc.ObjCBlock<
+ ffi.Void Function(NSObject, ffi.Pointer<objc.ObjCObject>,
+ ffi.Pointer<objc.ObjCObject>)> blocking(
+ void Function(NSObject, objc.ObjCObjectBase, objc.ObjCObjectBase) fn,
+ {bool keepIsolateAlive = true}) {
+ final raw = objc.newClosureBlock(
+ _ObjCBlock_ffiVoid_NSObject_objcObjCObject_objcObjCObject_blockingCallable
+ .nativeFunction
+ .cast(),
+ (ffi.Pointer<objc.ObjCObject> arg0, ffi.Pointer<objc.ObjCObject> arg1,
+ ffi.Pointer<objc.ObjCObject> arg2) =>
+ fn(
+ NSObject.castFromPointer(arg0, retain: false, release: true),
+ objc.ObjCObjectBase(arg1, retain: false, release: true),
+ objc.ObjCObjectBase(arg2, retain: false, release: true)),
+ keepIsolateAlive);
+ final rawListener = objc.newClosureBlock(
+ _ObjCBlock_ffiVoid_NSObject_objcObjCObject_objcObjCObject_blockingListenerCallable
+ .nativeFunction
+ .cast(),
+ (ffi.Pointer<objc.ObjCObject> arg0, ffi.Pointer<objc.ObjCObject> arg1,
+ ffi.Pointer<objc.ObjCObject> arg2) =>
+ fn(
+ NSObject.castFromPointer(arg0, retain: false, release: true),
+ objc.ObjCObjectBase(arg1, retain: false, release: true),
+ objc.ObjCObjectBase(arg2, retain: false, release: true)),
+ keepIsolateAlive);
+ final wrapper = _ObjectiveCBindings_wrapBlockingBlock_r8gdi7(
+ raw, rawListener, objc.objCContext);
+ objc.objectRelease(raw.cast());
+ objc.objectRelease(rawListener.cast());
+ return objc.ObjCBlock<
+ ffi.Void Function(NSObject, ffi.Pointer<objc.ObjCObject>,
+ ffi.Pointer<objc.ObjCObject>)>(wrapper,
+ retain: false, release: true);
+ }
+}
+
+/// Call operator for `objc.ObjCBlock<ffi.Void Function(NSObject, ffi.Pointer<objc.ObjCObject>, ffi.Pointer<objc.ObjCObject>)>`.
+extension ObjCBlock_ffiVoid_NSObject_objcObjCObject_objcObjCObject_CallExtension
+ on objc.ObjCBlock<
+ ffi.Void Function(NSObject, ffi.Pointer<objc.ObjCObject>,
+ ffi.Pointer<objc.ObjCObject>)> {
+ void call(
+ NSObject arg0, objc.ObjCObjectBase arg1, objc.ObjCObjectBase arg2) =>
+ ref.pointer.ref.invoke
+ .cast<
+ ffi.NativeFunction<
+ ffi.Void Function(
+ ffi.Pointer<objc.ObjCBlockImpl> block,
+ ffi.Pointer<objc.ObjCObject> arg0,
+ ffi.Pointer<objc.ObjCObject> arg1,
+ ffi.Pointer<objc.ObjCObject> arg2)>>()
+ .asFunction<
+ void Function(
+ ffi.Pointer<objc.ObjCBlockImpl>,
+ ffi.Pointer<objc.ObjCObject>,
+ ffi.Pointer<objc.ObjCObject>,
+ ffi.Pointer<objc.ObjCObject>)>()(
+ ref.pointer, arg0.ref.pointer, arg1.ref.pointer, arg2.ref.pointer);
+}
+
+void _ObjCBlock_ffiVoid_NSRange_bool_fnPtrTrampoline(
+ ffi.Pointer<objc.ObjCBlockImpl> block,
+ NSRange arg0,
+ ffi.Pointer<ffi.Bool> arg1) =>
+ block.ref.target
+ .cast<
+ ffi.NativeFunction<
+ ffi.Void Function(NSRange arg0, ffi.Pointer<ffi.Bool> arg1)>>()
+ .asFunction<
+ void Function(NSRange, ffi.Pointer<ffi.Bool>)>()(arg0, arg1);
+ffi.Pointer<ffi.Void> _ObjCBlock_ffiVoid_NSRange_bool_fnPtrCallable =
+ ffi.Pointer.fromFunction<
+ ffi.Void Function(ffi.Pointer<objc.ObjCBlockImpl>, NSRange,
+ ffi.Pointer<ffi.Bool>)>(
+ _ObjCBlock_ffiVoid_NSRange_bool_fnPtrTrampoline)
+ .cast();
+void _ObjCBlock_ffiVoid_NSRange_bool_closureTrampoline(
+ ffi.Pointer<objc.ObjCBlockImpl> block,
+ NSRange arg0,
+ ffi.Pointer<ffi.Bool> arg1) =>
+ (objc.getBlockClosure(block) as void Function(
+ NSRange, ffi.Pointer<ffi.Bool>))(arg0, arg1);
+ffi.Pointer<ffi.Void> _ObjCBlock_ffiVoid_NSRange_bool_closureCallable =
+ ffi.Pointer.fromFunction<
+ ffi.Void Function(ffi.Pointer<objc.ObjCBlockImpl>, NSRange,
+ ffi.Pointer<ffi.Bool>)>(
+ _ObjCBlock_ffiVoid_NSRange_bool_closureTrampoline)
+ .cast();
+void _ObjCBlock_ffiVoid_NSRange_bool_listenerTrampoline(
+ ffi.Pointer<objc.ObjCBlockImpl> block,
+ NSRange arg0,
+ ffi.Pointer<ffi.Bool> arg1) {
+ (objc.getBlockClosure(block) as void Function(
+ NSRange, ffi.Pointer<ffi.Bool>))(arg0, arg1);
+ objc.objectRelease(block.cast());
+}
+
+ffi.NativeCallable<
+ ffi.Void Function(
+ ffi.Pointer<objc.ObjCBlockImpl>, NSRange, ffi.Pointer<ffi.Bool>)>
+ _ObjCBlock_ffiVoid_NSRange_bool_listenerCallable = ffi.NativeCallable<
+ ffi.Void Function(ffi.Pointer<objc.ObjCBlockImpl>, NSRange,
+ ffi.Pointer<ffi.Bool>)>.listener(
+ _ObjCBlock_ffiVoid_NSRange_bool_listenerTrampoline)
+ ..keepIsolateAlive = false;
+void _ObjCBlock_ffiVoid_NSRange_bool_blockingTrampoline(
+ ffi.Pointer<objc.ObjCBlockImpl> block,
+ ffi.Pointer<ffi.Void> waiter,
+ NSRange arg0,
+ ffi.Pointer<ffi.Bool> arg1) {
+ try {
+ (objc.getBlockClosure(block) as void Function(
+ NSRange, ffi.Pointer<ffi.Bool>))(arg0, arg1);
+ } catch (e) {
+ } finally {
+ objc.signalWaiter(waiter);
+ objc.objectRelease(block.cast());
+ }
+}
+
+ffi.NativeCallable<
+ ffi.Void Function(ffi.Pointer<objc.ObjCBlockImpl>,
+ ffi.Pointer<ffi.Void>, NSRange, ffi.Pointer<ffi.Bool>)>
+ _ObjCBlock_ffiVoid_NSRange_bool_blockingCallable = ffi.NativeCallable<
+ ffi.Void Function(
+ ffi.Pointer<objc.ObjCBlockImpl>,
+ ffi.Pointer<ffi.Void>,
+ NSRange,
+ ffi.Pointer<ffi.Bool>)>.isolateLocal(
+ _ObjCBlock_ffiVoid_NSRange_bool_blockingTrampoline)
+ ..keepIsolateAlive = false;
+ffi.NativeCallable<
+ ffi.Void Function(ffi.Pointer<objc.ObjCBlockImpl>,
+ ffi.Pointer<ffi.Void>, NSRange, ffi.Pointer<ffi.Bool>)>
+ _ObjCBlock_ffiVoid_NSRange_bool_blockingListenerCallable = ffi
+ .NativeCallable<
+ ffi.Void Function(
+ ffi.Pointer<objc.ObjCBlockImpl>,
+ ffi.Pointer<ffi.Void>,
+ NSRange,
+ ffi.Pointer<ffi.Bool>)>.listener(
+ _ObjCBlock_ffiVoid_NSRange_bool_blockingTrampoline)
+ ..keepIsolateAlive = false;
+
+/// Construction methods for `objc.ObjCBlock<ffi.Void Function(NSRange, ffi.Pointer<ffi.Bool>)>`.
+abstract final class ObjCBlock_ffiVoid_NSRange_bool {
+ /// Returns a block that wraps the given raw block pointer.
+ static objc.ObjCBlock<ffi.Void Function(NSRange, ffi.Pointer<ffi.Bool>)>
+ castFromPointer(ffi.Pointer<objc.ObjCBlockImpl> pointer,
+ {bool retain = false, bool release = false}) =>
+ objc.ObjCBlock<ffi.Void Function(NSRange, ffi.Pointer<ffi.Bool>)>(
+ pointer,
+ retain: retain,
+ release: release);
+
+ /// Creates a block from a C function pointer.
+ ///
+ /// This block must be invoked by native code running on the same thread as
+ /// the isolate that registered it. Invoking the block on the wrong thread
+ /// will result in a crash.
+ static objc.ObjCBlock<
+ ffi.Void Function(NSRange, ffi.Pointer<ffi.Bool>)> fromFunctionPointer(
+ ffi.Pointer<ffi.NativeFunction<ffi.Void Function(NSRange arg0, ffi.Pointer<ffi.Bool> arg1)>>
+ ptr) =>
+ objc.ObjCBlock<ffi.Void Function(NSRange, ffi.Pointer<ffi.Bool>)>(
+ objc.newPointerBlock(
+ _ObjCBlock_ffiVoid_NSRange_bool_fnPtrCallable, ptr.cast()),
+ retain: false,
+ release: true);
+
+ /// Creates a block from a Dart function.
+ ///
+ /// This block must be invoked by native code running on the same thread as
+ /// the isolate that registered it. Invoking the block on the wrong thread
+ /// will result in a crash.
+ ///
+ /// If `keepIsolateAlive` is true, this block will keep this isolate alive
+ /// until it is garbage collected by both Dart and ObjC.
+ static objc.ObjCBlock<ffi.Void Function(NSRange, ffi.Pointer<ffi.Bool>)>
+ fromFunction(void Function(NSRange, ffi.Pointer<ffi.Bool>) fn,
+ {bool keepIsolateAlive = true}) =>
+ objc.ObjCBlock<ffi.Void Function(NSRange, ffi.Pointer<ffi.Bool>)>(
+ objc.newClosureBlock(
+ _ObjCBlock_ffiVoid_NSRange_bool_closureCallable,
+ (NSRange arg0, ffi.Pointer<ffi.Bool> arg1) => fn(arg0, arg1),
+ keepIsolateAlive),
+ retain: false,
+ release: true);
+
+ /// Creates a listener block from a Dart function.
+ ///
+ /// This is based on FFI's NativeCallable.listener, and has the same
+ /// capabilities and limitations. This block can be invoked from any thread,
+ /// but only supports void functions, and is not run synchronously. See
+ /// NativeCallable.listener for more details.
+ ///
+ /// If `keepIsolateAlive` is true, this block will keep this isolate alive
+ /// until it is garbage collected by both Dart and ObjC.
+ static objc.ObjCBlock<ffi.Void Function(NSRange, ffi.Pointer<ffi.Bool>)>
+ listener(void Function(NSRange, ffi.Pointer<ffi.Bool>) fn,
+ {bool keepIsolateAlive = true}) {
+ final raw = objc.newClosureBlock(
+ _ObjCBlock_ffiVoid_NSRange_bool_listenerCallable.nativeFunction.cast(),
+ (NSRange arg0, ffi.Pointer<ffi.Bool> arg1) => fn(arg0, arg1),
+ keepIsolateAlive);
+ final wrapper = _ObjectiveCBindings_wrapListenerBlock_zkjmn1(raw);
+ objc.objectRelease(raw.cast());
+ return objc.ObjCBlock<ffi.Void Function(NSRange, ffi.Pointer<ffi.Bool>)>(
+ wrapper,
+ retain: false,
+ release: true);
+ }
+
+ /// Creates a blocking block from a Dart function.
+ ///
+ /// This callback can be invoked from any native thread, and will block the
+ /// caller until the callback is handled by the Dart isolate that created
+ /// the block. Async functions are not supported.
+ ///
+ /// If `keepIsolateAlive` is true, this block will keep this isolate alive
+ /// until it is garbage collected by both Dart and ObjC. If the owner isolate
+ /// has shut down, and the block is invoked by native code, it may block
+ /// indefinitely, or have other undefined behavior.
+ static objc.ObjCBlock<ffi.Void Function(NSRange, ffi.Pointer<ffi.Bool>)>
+ blocking(void Function(NSRange, ffi.Pointer<ffi.Bool>) fn,
+ {bool keepIsolateAlive = true}) {
+ final raw = objc.newClosureBlock(
+ _ObjCBlock_ffiVoid_NSRange_bool_blockingCallable.nativeFunction.cast(),
+ (NSRange arg0, ffi.Pointer<ffi.Bool> arg1) => fn(arg0, arg1),
+ keepIsolateAlive);
+ final rawListener = objc.newClosureBlock(
+ _ObjCBlock_ffiVoid_NSRange_bool_blockingListenerCallable.nativeFunction
+ .cast(),
+ (NSRange arg0, ffi.Pointer<ffi.Bool> arg1) => fn(arg0, arg1),
+ keepIsolateAlive);
+ final wrapper = _ObjectiveCBindings_wrapBlockingBlock_zkjmn1(
+ raw, rawListener, objc.objCContext);
+ objc.objectRelease(raw.cast());
+ objc.objectRelease(rawListener.cast());
+ return objc.ObjCBlock<ffi.Void Function(NSRange, ffi.Pointer<ffi.Bool>)>(
+ wrapper,
+ retain: false,
+ release: true);
+ }
+}
+
+/// Call operator for `objc.ObjCBlock<ffi.Void Function(NSRange, ffi.Pointer<ffi.Bool>)>`.
+extension ObjCBlock_ffiVoid_NSRange_bool_CallExtension
+ on objc.ObjCBlock<ffi.Void Function(NSRange, ffi.Pointer<ffi.Bool>)> {
+ void call(NSRange arg0, ffi.Pointer<ffi.Bool> arg1) => ref.pointer.ref.invoke
+ .cast<
+ ffi.NativeFunction<
+ ffi.Void Function(ffi.Pointer<objc.ObjCBlockImpl> block,
+ NSRange arg0, ffi.Pointer<ffi.Bool> arg1)>>()
+ .asFunction<
+ void Function(ffi.Pointer<objc.ObjCBlockImpl>, NSRange,
+ ffi.Pointer<ffi.Bool>)>()(ref.pointer, arg0, arg1);
+}
+
+void _ObjCBlock_ffiVoid_NSString_NSRange_NSRange_bool_fnPtrTrampoline(
+ ffi.Pointer<objc.ObjCBlockImpl> block,
+ ffi.Pointer<objc.ObjCObject> arg0,
+ NSRange arg1,
+ NSRange arg2,
+ ffi.Pointer<ffi.Bool> arg3) =>
+ block.ref.target
+ .cast<
+ ffi.NativeFunction<
+ ffi.Void Function(ffi.Pointer<objc.ObjCObject> arg0,
+ NSRange arg1, NSRange arg2, ffi.Pointer<ffi.Bool> arg3)>>()
+ .asFunction<
+ void Function(ffi.Pointer<objc.ObjCObject>, NSRange, NSRange,
+ ffi.Pointer<ffi.Bool>)>()(arg0, arg1, arg2, arg3);
+ffi.Pointer<ffi.Void>
+ _ObjCBlock_ffiVoid_NSString_NSRange_NSRange_bool_fnPtrCallable =
+ ffi.Pointer.fromFunction<
+ ffi.Void Function(
+ ffi.Pointer<objc.ObjCBlockImpl>,
+ ffi.Pointer<objc.ObjCObject>,
+ NSRange,
+ NSRange,
+ ffi.Pointer<ffi.Bool>)>(
+ _ObjCBlock_ffiVoid_NSString_NSRange_NSRange_bool_fnPtrTrampoline)
+ .cast();
+void _ObjCBlock_ffiVoid_NSString_NSRange_NSRange_bool_closureTrampoline(
+ ffi.Pointer<objc.ObjCBlockImpl> block,
+ ffi.Pointer<objc.ObjCObject> arg0,
+ NSRange arg1,
+ NSRange arg2,
+ ffi.Pointer<ffi.Bool> arg3) =>
+ (objc.getBlockClosure(block) as void Function(ffi.Pointer<objc.ObjCObject>,
+ NSRange, NSRange, ffi.Pointer<ffi.Bool>))(arg0, arg1, arg2, arg3);
+ffi.Pointer<ffi.Void>
+ _ObjCBlock_ffiVoid_NSString_NSRange_NSRange_bool_closureCallable =
+ ffi.Pointer.fromFunction<
+ ffi.Void Function(
+ ffi.Pointer<objc.ObjCBlockImpl>,
+ ffi.Pointer<objc.ObjCObject>,
+ NSRange,
+ NSRange,
+ ffi.Pointer<ffi.Bool>)>(
+ _ObjCBlock_ffiVoid_NSString_NSRange_NSRange_bool_closureTrampoline)
+ .cast();
+void _ObjCBlock_ffiVoid_NSString_NSRange_NSRange_bool_listenerTrampoline(
+ ffi.Pointer<objc.ObjCBlockImpl> block,
+ ffi.Pointer<objc.ObjCObject> arg0,
+ NSRange arg1,
+ NSRange arg2,
+ ffi.Pointer<ffi.Bool> arg3) {
+ (objc.getBlockClosure(block) as void Function(ffi.Pointer<objc.ObjCObject>,
+ NSRange, NSRange, ffi.Pointer<ffi.Bool>))(arg0, arg1, arg2, arg3);
+ objc.objectRelease(block.cast());
+}
+
+ffi.NativeCallable<
+ ffi.Void Function(
+ ffi.Pointer<objc.ObjCBlockImpl>,
+ ffi.Pointer<objc.ObjCObject>,
+ NSRange,
+ NSRange,
+ ffi.Pointer<ffi.Bool>)>
+ _ObjCBlock_ffiVoid_NSString_NSRange_NSRange_bool_listenerCallable = ffi
+ .NativeCallable<
+ ffi.Void Function(
+ ffi.Pointer<objc.ObjCBlockImpl>,
+ ffi.Pointer<objc.ObjCObject>,
+ NSRange,
+ NSRange,
+ ffi.Pointer<ffi.Bool>)>.listener(
+ _ObjCBlock_ffiVoid_NSString_NSRange_NSRange_bool_listenerTrampoline)
+ ..keepIsolateAlive = false;
+void _ObjCBlock_ffiVoid_NSString_NSRange_NSRange_bool_blockingTrampoline(
+ ffi.Pointer<objc.ObjCBlockImpl> block,
+ ffi.Pointer<ffi.Void> waiter,
+ ffi.Pointer<objc.ObjCObject> arg0,
+ NSRange arg1,
+ NSRange arg2,
+ ffi.Pointer<ffi.Bool> arg3) {
+ try {
+ (objc.getBlockClosure(block) as void Function(ffi.Pointer<objc.ObjCObject>,
+ NSRange, NSRange, ffi.Pointer<ffi.Bool>))(arg0, arg1, arg2, arg3);
+ } catch (e) {
+ } finally {
+ objc.signalWaiter(waiter);
+ objc.objectRelease(block.cast());
+ }
+}
+
+ffi.NativeCallable<
+ ffi.Void Function(
+ ffi.Pointer<objc.ObjCBlockImpl>,
+ ffi.Pointer<ffi.Void>,
+ ffi.Pointer<objc.ObjCObject>,
+ NSRange,
+ NSRange,
+ ffi.Pointer<ffi.Bool>)>
+ _ObjCBlock_ffiVoid_NSString_NSRange_NSRange_bool_blockingCallable =
+ ffi.NativeCallable<
+ ffi.Void Function(
+ ffi.Pointer<objc.ObjCBlockImpl>,
+ ffi.Pointer<ffi.Void>,
+ ffi.Pointer<objc.ObjCObject>,
+ NSRange,
+ NSRange,
+ ffi.Pointer<ffi.Bool>)>.isolateLocal(
+ _ObjCBlock_ffiVoid_NSString_NSRange_NSRange_bool_blockingTrampoline)
+ ..keepIsolateAlive = false;
+ffi.NativeCallable<
+ ffi.Void Function(
+ ffi.Pointer<objc.ObjCBlockImpl>,
+ ffi.Pointer<ffi.Void>,
+ ffi.Pointer<objc.ObjCObject>,
+ NSRange,
+ NSRange,
+ ffi.Pointer<ffi.Bool>)>
+ _ObjCBlock_ffiVoid_NSString_NSRange_NSRange_bool_blockingListenerCallable =
+ ffi.NativeCallable<
+ ffi.Void Function(
+ ffi.Pointer<objc.ObjCBlockImpl>,
+ ffi.Pointer<ffi.Void>,
+ ffi.Pointer<objc.ObjCObject>,
+ NSRange,
+ NSRange,
+ ffi.Pointer<ffi.Bool>)>.listener(
+ _ObjCBlock_ffiVoid_NSString_NSRange_NSRange_bool_blockingTrampoline)
+ ..keepIsolateAlive = false;
+
+/// Construction methods for `objc.ObjCBlock<ffi.Void Function(NSString?, NSRange, NSRange, ffi.Pointer<ffi.Bool>)>`.
+abstract final class ObjCBlock_ffiVoid_NSString_NSRange_NSRange_bool {
+ /// Returns a block that wraps the given raw block pointer.
+ static objc.ObjCBlock<
+ ffi.Void Function(NSString?, NSRange, NSRange, ffi.Pointer<ffi.Bool>)>
+ castFromPointer(ffi.Pointer<objc.ObjCBlockImpl> pointer,
+ {bool retain = false, bool release = false}) =>
+ objc.ObjCBlock<
+ ffi.Void Function(
+ NSString?, NSRange, NSRange, ffi.Pointer<ffi.Bool>)>(
+ pointer,
+ retain: retain,
+ release: release);
+
+ /// Creates a block from a C function pointer.
+ ///
+ /// This block must be invoked by native code running on the same thread as
+ /// the isolate that registered it. Invoking the block on the wrong thread
+ /// will result in a crash.
+ static objc
+ .ObjCBlock<ffi.Void Function(NSString?, NSRange, NSRange, ffi.Pointer<ffi.Bool>)>
+ fromFunctionPointer(
+ ffi.Pointer<ffi.NativeFunction<ffi.Void Function(ffi.Pointer<objc.ObjCObject> arg0, NSRange arg1, NSRange arg2, ffi.Pointer<ffi.Bool> arg3)>>
+ ptr) =>
+ objc.ObjCBlock<ffi.Void Function(NSString?, NSRange, NSRange, ffi.Pointer<ffi.Bool>)>(
+ objc.newPointerBlock(
+ _ObjCBlock_ffiVoid_NSString_NSRange_NSRange_bool_fnPtrCallable,
+ ptr.cast()),
+ retain: false,
+ release: true);
+
+ /// Creates a block from a Dart function.
+ ///
+ /// This block must be invoked by native code running on the same thread as
+ /// the isolate that registered it. Invoking the block on the wrong thread
+ /// will result in a crash.
+ ///
+ /// If `keepIsolateAlive` is true, this block will keep this isolate alive
+ /// until it is garbage collected by both Dart and ObjC.
+ static objc
+ .ObjCBlock<ffi.Void Function(NSString?, NSRange, NSRange, ffi.Pointer<ffi.Bool>)>
+ fromFunction(void Function(NSString?, NSRange, NSRange, ffi.Pointer<ffi.Bool>) fn,
+ {bool keepIsolateAlive = true}) =>
+ objc.ObjCBlock<ffi.Void Function(NSString?, NSRange, NSRange, ffi.Pointer<ffi.Bool>)>(
+ objc.newClosureBlock(
+ _ObjCBlock_ffiVoid_NSString_NSRange_NSRange_bool_closureCallable,
+ (ffi.Pointer<objc.ObjCObject> arg0, NSRange arg1,
+ NSRange arg2, ffi.Pointer<ffi.Bool> arg3) =>
+ fn(arg0.address == 0 ? null : NSString.castFromPointer(arg0, retain: true, release: true), arg1, arg2, arg3),
+ keepIsolateAlive),
+ retain: false,
+ release: true);
+
+ /// Creates a listener block from a Dart function.
+ ///
+ /// This is based on FFI's NativeCallable.listener, and has the same
+ /// capabilities and limitations. This block can be invoked from any thread,
+ /// but only supports void functions, and is not run synchronously. See
+ /// NativeCallable.listener for more details.
+ ///
+ /// If `keepIsolateAlive` is true, this block will keep this isolate alive
+ /// until it is garbage collected by both Dart and ObjC.
+ static objc.ObjCBlock<
+ ffi.Void Function(NSString?, NSRange, NSRange, ffi.Pointer<ffi.Bool>)>
+ listener(
+ void Function(NSString?, NSRange, NSRange, ffi.Pointer<ffi.Bool>) fn,
+ {bool keepIsolateAlive = true}) {
+ final raw = objc.newClosureBlock(
+ _ObjCBlock_ffiVoid_NSString_NSRange_NSRange_bool_listenerCallable
+ .nativeFunction
+ .cast(),
+ (ffi.Pointer<objc.ObjCObject> arg0, NSRange arg1, NSRange arg2,
+ ffi.Pointer<ffi.Bool> arg3) =>
+ fn(
+ arg0.address == 0
+ ? null
+ : NSString.castFromPointer(arg0,
+ retain: false, release: true),
+ arg1,
+ arg2,
+ arg3),
+ keepIsolateAlive);
+ final wrapper = _ObjectiveCBindings_wrapListenerBlock_lmc3p5(raw);
+ objc.objectRelease(raw.cast());
+ return objc.ObjCBlock<
+ ffi.Void Function(NSString?, NSRange, NSRange,
+ ffi.Pointer<ffi.Bool>)>(wrapper, retain: false, release: true);
+ }
+
+ /// Creates a blocking block from a Dart function.
+ ///
+ /// This callback can be invoked from any native thread, and will block the
+ /// caller until the callback is handled by the Dart isolate that created
+ /// the block. Async functions are not supported.
+ ///
+ /// If `keepIsolateAlive` is true, this block will keep this isolate alive
+ /// until it is garbage collected by both Dart and ObjC. If the owner isolate
+ /// has shut down, and the block is invoked by native code, it may block
+ /// indefinitely, or have other undefined behavior.
+ static objc.ObjCBlock<
+ ffi.Void Function(NSString?, NSRange, NSRange, ffi.Pointer<ffi.Bool>)>
+ blocking(
+ void Function(NSString?, NSRange, NSRange, ffi.Pointer<ffi.Bool>) fn,
+ {bool keepIsolateAlive = true}) {
+ final raw = objc.newClosureBlock(
+ _ObjCBlock_ffiVoid_NSString_NSRange_NSRange_bool_blockingCallable
+ .nativeFunction
+ .cast(),
+ (ffi.Pointer<objc.ObjCObject> arg0, NSRange arg1, NSRange arg2,
+ ffi.Pointer<ffi.Bool> arg3) =>
+ fn(
+ arg0.address == 0
+ ? null
+ : NSString.castFromPointer(arg0,
+ retain: false, release: true),
+ arg1,
+ arg2,
+ arg3),
+ keepIsolateAlive);
+ final rawListener = objc.newClosureBlock(
+ _ObjCBlock_ffiVoid_NSString_NSRange_NSRange_bool_blockingListenerCallable
+ .nativeFunction
+ .cast(),
+ (ffi.Pointer<objc.ObjCObject> arg0, NSRange arg1, NSRange arg2,
+ ffi.Pointer<ffi.Bool> arg3) =>
+ fn(
+ arg0.address == 0
+ ? null
+ : NSString.castFromPointer(arg0,
+ retain: false, release: true),
+ arg1,
+ arg2,
+ arg3),
+ keepIsolateAlive);
+ final wrapper = _ObjectiveCBindings_wrapBlockingBlock_lmc3p5(
+ raw, rawListener, objc.objCContext);
+ objc.objectRelease(raw.cast());
+ objc.objectRelease(rawListener.cast());
+ return objc.ObjCBlock<
+ ffi.Void Function(NSString?, NSRange, NSRange,
+ ffi.Pointer<ffi.Bool>)>(wrapper, retain: false, release: true);
+ }
+}
+
+/// Call operator for `objc.ObjCBlock<ffi.Void Function(NSString?, NSRange, NSRange, ffi.Pointer<ffi.Bool>)>`.
+extension ObjCBlock_ffiVoid_NSString_NSRange_NSRange_bool_CallExtension
+ on objc.ObjCBlock<
+ ffi.Void Function(NSString?, NSRange, NSRange, ffi.Pointer<ffi.Bool>)> {
+ void call(NSString? arg0, NSRange arg1, NSRange arg2,
+ ffi.Pointer<ffi.Bool> arg3) =>
+ ref.pointer.ref.invoke
+ .cast<
+ ffi.NativeFunction<
+ ffi.Void Function(
+ ffi.Pointer<objc.ObjCBlockImpl> block,
+ ffi.Pointer<objc.ObjCObject> arg0,
+ NSRange arg1,
+ NSRange arg2,
+ ffi.Pointer<ffi.Bool> arg3)>>()
+ .asFunction<
+ void Function(
+ ffi.Pointer<objc.ObjCBlockImpl>,
+ ffi.Pointer<objc.ObjCObject>,
+ NSRange,
+ NSRange,
+ ffi.Pointer<ffi.Bool>)>()(
+ ref.pointer, arg0?.ref.pointer ?? ffi.nullptr, arg1, arg2, arg3);
+}
+
+void _ObjCBlock_ffiVoid_NSString_bool_fnPtrTrampoline(
+ ffi.Pointer<objc.ObjCBlockImpl> block,
+ ffi.Pointer<objc.ObjCObject> arg0,
+ ffi.Pointer<ffi.Bool> arg1) =>
+ block.ref.target
+ .cast<
+ ffi.NativeFunction<
+ ffi.Void Function(ffi.Pointer<objc.ObjCObject> arg0,
+ ffi.Pointer<ffi.Bool> arg1)>>()
+ .asFunction<
+ void Function(ffi.Pointer<objc.ObjCObject>,
+ ffi.Pointer<ffi.Bool>)>()(arg0, arg1);
+ffi.Pointer<ffi.Void> _ObjCBlock_ffiVoid_NSString_bool_fnPtrCallable =
+ ffi.Pointer.fromFunction<
+ ffi.Void Function(ffi.Pointer<objc.ObjCBlockImpl>,
+ ffi.Pointer<objc.ObjCObject>, ffi.Pointer<ffi.Bool>)>(
+ _ObjCBlock_ffiVoid_NSString_bool_fnPtrTrampoline)
+ .cast();
+void _ObjCBlock_ffiVoid_NSString_bool_closureTrampoline(
+ ffi.Pointer<objc.ObjCBlockImpl> block,
+ ffi.Pointer<objc.ObjCObject> arg0,
+ ffi.Pointer<ffi.Bool> arg1) =>
+ (objc.getBlockClosure(block) as void Function(
+ ffi.Pointer<objc.ObjCObject>, ffi.Pointer<ffi.Bool>))(arg0, arg1);
+ffi.Pointer<ffi.Void> _ObjCBlock_ffiVoid_NSString_bool_closureCallable =
+ ffi.Pointer.fromFunction<
+ ffi.Void Function(ffi.Pointer<objc.ObjCBlockImpl>,
+ ffi.Pointer<objc.ObjCObject>, ffi.Pointer<ffi.Bool>)>(
+ _ObjCBlock_ffiVoid_NSString_bool_closureTrampoline)
+ .cast();
+void _ObjCBlock_ffiVoid_NSString_bool_listenerTrampoline(
+ ffi.Pointer<objc.ObjCBlockImpl> block,
+ ffi.Pointer<objc.ObjCObject> arg0,
+ ffi.Pointer<ffi.Bool> arg1) {
+ (objc.getBlockClosure(block) as void Function(
+ ffi.Pointer<objc.ObjCObject>, ffi.Pointer<ffi.Bool>))(arg0, arg1);
+ objc.objectRelease(block.cast());
+}
+
+ffi.NativeCallable<
+ ffi.Void Function(ffi.Pointer<objc.ObjCBlockImpl>,
+ ffi.Pointer<objc.ObjCObject>, ffi.Pointer<ffi.Bool>)>
+ _ObjCBlock_ffiVoid_NSString_bool_listenerCallable = ffi.NativeCallable<
+ ffi.Void Function(ffi.Pointer<objc.ObjCBlockImpl>,
+ ffi.Pointer<objc.ObjCObject>, ffi.Pointer<ffi.Bool>)>.listener(
+ _ObjCBlock_ffiVoid_NSString_bool_listenerTrampoline)
+ ..keepIsolateAlive = false;
+void _ObjCBlock_ffiVoid_NSString_bool_blockingTrampoline(
+ ffi.Pointer<objc.ObjCBlockImpl> block,
+ ffi.Pointer<ffi.Void> waiter,
+ ffi.Pointer<objc.ObjCObject> arg0,
+ ffi.Pointer<ffi.Bool> arg1) {
+ try {
+ (objc.getBlockClosure(block) as void Function(
+ ffi.Pointer<objc.ObjCObject>, ffi.Pointer<ffi.Bool>))(arg0, arg1);
+ } catch (e) {
+ } finally {
+ objc.signalWaiter(waiter);
+ objc.objectRelease(block.cast());
+ }
+}
+
+ffi.NativeCallable<
+ ffi.Void Function(
+ ffi.Pointer<objc.ObjCBlockImpl>,
+ ffi.Pointer<ffi.Void>,
+ ffi.Pointer<objc.ObjCObject>,
+ ffi.Pointer<ffi.Bool>)>
+ _ObjCBlock_ffiVoid_NSString_bool_blockingCallable = ffi.NativeCallable<
+ ffi.Void Function(
+ ffi.Pointer<objc.ObjCBlockImpl>,
+ ffi.Pointer<ffi.Void>,
+ ffi.Pointer<objc.ObjCObject>,
+ ffi.Pointer<ffi.Bool>)>.isolateLocal(
+ _ObjCBlock_ffiVoid_NSString_bool_blockingTrampoline)
+ ..keepIsolateAlive = false;
+ffi.NativeCallable<
+ ffi.Void Function(
+ ffi.Pointer<objc.ObjCBlockImpl>,
+ ffi.Pointer<ffi.Void>,
+ ffi.Pointer<objc.ObjCObject>,
+ ffi.Pointer<ffi.Bool>)>
+ _ObjCBlock_ffiVoid_NSString_bool_blockingListenerCallable = ffi
+ .NativeCallable<
+ ffi.Void Function(
+ ffi.Pointer<objc.ObjCBlockImpl>,
+ ffi.Pointer<ffi.Void>,
+ ffi.Pointer<objc.ObjCObject>,
+ ffi.Pointer<ffi.Bool>)>.listener(
+ _ObjCBlock_ffiVoid_NSString_bool_blockingTrampoline)
+ ..keepIsolateAlive = false;
+
+/// Construction methods for `objc.ObjCBlock<ffi.Void Function(NSString, ffi.Pointer<ffi.Bool>)>`.
+abstract final class ObjCBlock_ffiVoid_NSString_bool {
+ /// Returns a block that wraps the given raw block pointer.
+ static objc.ObjCBlock<ffi.Void Function(NSString, ffi.Pointer<ffi.Bool>)>
+ castFromPointer(ffi.Pointer<objc.ObjCBlockImpl> pointer,
+ {bool retain = false, bool release = false}) =>
+ objc.ObjCBlock<ffi.Void Function(NSString, ffi.Pointer<ffi.Bool>)>(
+ pointer,
+ retain: retain,
+ release: release);
+
+ /// Creates a block from a C function pointer.
+ ///
+ /// This block must be invoked by native code running on the same thread as
+ /// the isolate that registered it. Invoking the block on the wrong thread
+ /// will result in a crash.
+ static objc.ObjCBlock<ffi.Void Function(NSString, ffi.Pointer<ffi.Bool>)> fromFunctionPointer(
+ ffi.Pointer<
+ ffi.NativeFunction<
+ ffi.Void Function(ffi.Pointer<objc.ObjCObject> arg0,
+ ffi.Pointer<ffi.Bool> arg1)>>
+ ptr) =>
+ objc.ObjCBlock<ffi.Void Function(NSString, ffi.Pointer<ffi.Bool>)>(
+ objc.newPointerBlock(_ObjCBlock_ffiVoid_NSString_bool_fnPtrCallable, ptr.cast()),
+ retain: false,
+ release: true);
+
+ /// Creates a block from a Dart function.
+ ///
+ /// This block must be invoked by native code running on the same thread as
+ /// the isolate that registered it. Invoking the block on the wrong thread
+ /// will result in a crash.
+ ///
+ /// If `keepIsolateAlive` is true, this block will keep this isolate alive
+ /// until it is garbage collected by both Dart and ObjC.
+ static objc.ObjCBlock<
+ ffi.Void Function(NSString, ffi.Pointer<ffi.Bool>)> fromFunction(
+ void Function(NSString, ffi.Pointer<ffi.Bool>) fn,
+ {bool keepIsolateAlive = true}) =>
+ objc.ObjCBlock<ffi.Void Function(NSString, ffi.Pointer<ffi.Bool>)>(
+ objc.newClosureBlock(
+ _ObjCBlock_ffiVoid_NSString_bool_closureCallable,
+ (ffi.Pointer<objc.ObjCObject> arg0, ffi.Pointer<ffi.Bool> arg1) =>
+ fn(NSString.castFromPointer(arg0, retain: true, release: true), arg1),
+ keepIsolateAlive),
+ retain: false,
+ release: true);
+
+ /// Creates a listener block from a Dart function.
+ ///
+ /// This is based on FFI's NativeCallable.listener, and has the same
+ /// capabilities and limitations. This block can be invoked from any thread,
+ /// but only supports void functions, and is not run synchronously. See
+ /// NativeCallable.listener for more details.
+ ///
+ /// If `keepIsolateAlive` is true, this block will keep this isolate alive
+ /// until it is garbage collected by both Dart and ObjC.
+ static objc.ObjCBlock<ffi.Void Function(NSString, ffi.Pointer<ffi.Bool>)>
+ listener(void Function(NSString, ffi.Pointer<ffi.Bool>) fn,
+ {bool keepIsolateAlive = true}) {
+ final raw = objc.newClosureBlock(
+ _ObjCBlock_ffiVoid_NSString_bool_listenerCallable.nativeFunction.cast(),
+ (ffi.Pointer<objc.ObjCObject> arg0, ffi.Pointer<ffi.Bool> arg1) => fn(
+ NSString.castFromPointer(arg0, retain: false, release: true), arg1),
+ keepIsolateAlive);
+ final wrapper = _ObjectiveCBindings_wrapListenerBlock_t8l8el(raw);
+ objc.objectRelease(raw.cast());
+ return objc.ObjCBlock<ffi.Void Function(NSString, ffi.Pointer<ffi.Bool>)>(
+ wrapper,
+ retain: false,
+ release: true);
+ }
+
+ /// Creates a blocking block from a Dart function.
+ ///
+ /// This callback can be invoked from any native thread, and will block the
+ /// caller until the callback is handled by the Dart isolate that created
+ /// the block. Async functions are not supported.
+ ///
+ /// If `keepIsolateAlive` is true, this block will keep this isolate alive
+ /// until it is garbage collected by both Dart and ObjC. If the owner isolate
+ /// has shut down, and the block is invoked by native code, it may block
+ /// indefinitely, or have other undefined behavior.
+ static objc.ObjCBlock<ffi.Void Function(NSString, ffi.Pointer<ffi.Bool>)>
+ blocking(void Function(NSString, ffi.Pointer<ffi.Bool>) fn,
+ {bool keepIsolateAlive = true}) {
+ final raw = objc.newClosureBlock(
+ _ObjCBlock_ffiVoid_NSString_bool_blockingCallable.nativeFunction.cast(),
+ (ffi.Pointer<objc.ObjCObject> arg0, ffi.Pointer<ffi.Bool> arg1) => fn(
+ NSString.castFromPointer(arg0, retain: false, release: true), arg1),
+ keepIsolateAlive);
+ final rawListener = objc.newClosureBlock(
+ _ObjCBlock_ffiVoid_NSString_bool_blockingListenerCallable.nativeFunction
+ .cast(),
+ (ffi.Pointer<objc.ObjCObject> arg0, ffi.Pointer<ffi.Bool> arg1) => fn(
+ NSString.castFromPointer(arg0, retain: false, release: true), arg1),
+ keepIsolateAlive);
+ final wrapper = _ObjectiveCBindings_wrapBlockingBlock_t8l8el(
+ raw, rawListener, objc.objCContext);
+ objc.objectRelease(raw.cast());
+ objc.objectRelease(rawListener.cast());
+ return objc.ObjCBlock<ffi.Void Function(NSString, ffi.Pointer<ffi.Bool>)>(
+ wrapper,
+ retain: false,
+ release: true);
+ }
+}
+
+/// Call operator for `objc.ObjCBlock<ffi.Void Function(NSString, ffi.Pointer<ffi.Bool>)>`.
+extension ObjCBlock_ffiVoid_NSString_bool_CallExtension
+ on objc.ObjCBlock<ffi.Void Function(NSString, ffi.Pointer<ffi.Bool>)> {
+ void call(NSString arg0, ffi.Pointer<ffi.Bool> arg1) => ref.pointer.ref.invoke
+ .cast<
+ ffi.NativeFunction<
+ ffi.Void Function(
+ ffi.Pointer<objc.ObjCBlockImpl> block,
+ ffi.Pointer<objc.ObjCObject> arg0,
+ ffi.Pointer<ffi.Bool> arg1)>>()
+ .asFunction<
+ void Function(
+ ffi.Pointer<objc.ObjCBlockImpl>,
+ ffi.Pointer<objc.ObjCObject>,
+ ffi.Pointer<ffi.Bool>)>()(ref.pointer, arg0.ref.pointer, arg1);
+}
+
+void _ObjCBlock_ffiVoid_NSTimer_fnPtrTrampoline(
+ ffi.Pointer<objc.ObjCBlockImpl> block,
+ ffi.Pointer<objc.ObjCObject> arg0) =>
+ block.ref.target
+ .cast<
+ ffi.NativeFunction<
+ ffi.Void Function(ffi.Pointer<objc.ObjCObject> arg0)>>()
+ .asFunction<void Function(ffi.Pointer<objc.ObjCObject>)>()(arg0);
+ffi.Pointer<ffi.Void> _ObjCBlock_ffiVoid_NSTimer_fnPtrCallable =
+ ffi.Pointer.fromFunction<
+ ffi.Void Function(ffi.Pointer<objc.ObjCBlockImpl>,
+ ffi.Pointer<objc.ObjCObject>)>(
+ _ObjCBlock_ffiVoid_NSTimer_fnPtrTrampoline)
+ .cast();
+void _ObjCBlock_ffiVoid_NSTimer_closureTrampoline(
+ ffi.Pointer<objc.ObjCBlockImpl> block,
+ ffi.Pointer<objc.ObjCObject> arg0) =>
+ (objc.getBlockClosure(block) as void Function(
+ ffi.Pointer<objc.ObjCObject>))(arg0);
+ffi.Pointer<ffi.Void> _ObjCBlock_ffiVoid_NSTimer_closureCallable =
+ ffi.Pointer.fromFunction<
+ ffi.Void Function(ffi.Pointer<objc.ObjCBlockImpl>,
+ ffi.Pointer<objc.ObjCObject>)>(
+ _ObjCBlock_ffiVoid_NSTimer_closureTrampoline)
+ .cast();
+void _ObjCBlock_ffiVoid_NSTimer_listenerTrampoline(
+ ffi.Pointer<objc.ObjCBlockImpl> block, ffi.Pointer<objc.ObjCObject> arg0) {
+ (objc.getBlockClosure(block) as void Function(
+ ffi.Pointer<objc.ObjCObject>))(arg0);
+ objc.objectRelease(block.cast());
+}
+
+ffi.NativeCallable<
+ ffi.Void Function(
+ ffi.Pointer<objc.ObjCBlockImpl>, ffi.Pointer<objc.ObjCObject>)>
+ _ObjCBlock_ffiVoid_NSTimer_listenerCallable = ffi.NativeCallable<
+ ffi.Void Function(ffi.Pointer<objc.ObjCBlockImpl>,
+ ffi.Pointer<objc.ObjCObject>)>.listener(
+ _ObjCBlock_ffiVoid_NSTimer_listenerTrampoline)
+ ..keepIsolateAlive = false;
+void _ObjCBlock_ffiVoid_NSTimer_blockingTrampoline(
+ ffi.Pointer<objc.ObjCBlockImpl> block,
+ ffi.Pointer<ffi.Void> waiter,
+ ffi.Pointer<objc.ObjCObject> arg0) {
+ try {
+ (objc.getBlockClosure(block) as void Function(
+ ffi.Pointer<objc.ObjCObject>))(arg0);
+ } catch (e) {
+ } finally {
+ objc.signalWaiter(waiter);
+ objc.objectRelease(block.cast());
+ }
+}
+
+ffi.NativeCallable<
+ ffi.Void Function(ffi.Pointer<objc.ObjCBlockImpl>,
+ ffi.Pointer<ffi.Void>, ffi.Pointer<objc.ObjCObject>)>
+ _ObjCBlock_ffiVoid_NSTimer_blockingCallable = ffi.NativeCallable<
+ ffi.Void Function(
+ ffi.Pointer<objc.ObjCBlockImpl>,
+ ffi.Pointer<ffi.Void>,
+ ffi.Pointer<objc.ObjCObject>)>.isolateLocal(
+ _ObjCBlock_ffiVoid_NSTimer_blockingTrampoline)
+ ..keepIsolateAlive = false;
+ffi.NativeCallable<
+ ffi.Void Function(ffi.Pointer<objc.ObjCBlockImpl>,
+ ffi.Pointer<ffi.Void>, ffi.Pointer<objc.ObjCObject>)>
+ _ObjCBlock_ffiVoid_NSTimer_blockingListenerCallable = ffi.NativeCallable<
+ ffi.Void Function(ffi.Pointer<objc.ObjCBlockImpl>,
+ ffi.Pointer<ffi.Void>, ffi.Pointer<objc.ObjCObject>)>.listener(
+ _ObjCBlock_ffiVoid_NSTimer_blockingTrampoline)
+ ..keepIsolateAlive = false;
+
+/// Construction methods for `objc.ObjCBlock<ffi.Void Function(NSTimer)>`.
+abstract final class ObjCBlock_ffiVoid_NSTimer {
+ /// Returns a block that wraps the given raw block pointer.
+ static objc.ObjCBlock<ffi.Void Function(NSTimer)> castFromPointer(
+ ffi.Pointer<objc.ObjCBlockImpl> pointer,
+ {bool retain = false,
+ bool release = false}) =>
+ objc.ObjCBlock<ffi.Void Function(NSTimer)>(pointer,
+ retain: retain, release: release);
+
+ /// Creates a block from a C function pointer.
+ ///
+ /// This block must be invoked by native code running on the same thread as
+ /// the isolate that registered it. Invoking the block on the wrong thread
+ /// will result in a crash.
+ static objc.ObjCBlock<ffi.Void Function(NSTimer)> fromFunctionPointer(
+ ffi.Pointer<
+ ffi.NativeFunction<
+ ffi.Void Function(ffi.Pointer<objc.ObjCObject> arg0)>>
+ ptr) =>
+ objc.ObjCBlock<ffi.Void Function(NSTimer)>(
+ objc.newPointerBlock(
+ _ObjCBlock_ffiVoid_NSTimer_fnPtrCallable, ptr.cast()),
+ retain: false,
+ release: true);
+
+ /// Creates a block from a Dart function.
+ ///
+ /// This block must be invoked by native code running on the same thread as
+ /// the isolate that registered it. Invoking the block on the wrong thread
+ /// will result in a crash.
+ ///
+ /// If `keepIsolateAlive` is true, this block will keep this isolate alive
+ /// until it is garbage collected by both Dart and ObjC.
+ static objc.ObjCBlock<ffi.Void Function(NSTimer)> fromFunction(
+ void Function(NSTimer) fn,
+ {bool keepIsolateAlive = true}) =>
+ objc.ObjCBlock<ffi.Void Function(NSTimer)>(
+ objc.newClosureBlock(
+ _ObjCBlock_ffiVoid_NSTimer_closureCallable,
+ (ffi.Pointer<objc.ObjCObject> arg0) => fn(
+ NSTimer.castFromPointer(arg0, retain: true, release: true)),
+ keepIsolateAlive),
+ retain: false,
+ release: true);
+
+ /// Creates a listener block from a Dart function.
+ ///
+ /// This is based on FFI's NativeCallable.listener, and has the same
+ /// capabilities and limitations. This block can be invoked from any thread,
+ /// but only supports void functions, and is not run synchronously. See
+ /// NativeCallable.listener for more details.
+ ///
+ /// If `keepIsolateAlive` is true, this block will keep this isolate alive
+ /// until it is garbage collected by both Dart and ObjC.
+ static objc.ObjCBlock<ffi.Void Function(NSTimer)> listener(
+ void Function(NSTimer) fn,
+ {bool keepIsolateAlive = true}) {
+ final raw = objc.newClosureBlock(
+ _ObjCBlock_ffiVoid_NSTimer_listenerCallable.nativeFunction.cast(),
+ (ffi.Pointer<objc.ObjCObject> arg0) =>
+ fn(NSTimer.castFromPointer(arg0, retain: false, release: true)),
+ keepIsolateAlive);
+ final wrapper = _ObjectiveCBindings_wrapListenerBlock_xtuoz7(raw);
+ objc.objectRelease(raw.cast());
+ return objc.ObjCBlock<ffi.Void Function(NSTimer)>(wrapper,
+ retain: false, release: true);
+ }
+
+ /// Creates a blocking block from a Dart function.
+ ///
+ /// This callback can be invoked from any native thread, and will block the
+ /// caller until the callback is handled by the Dart isolate that created
+ /// the block. Async functions are not supported.
+ ///
+ /// If `keepIsolateAlive` is true, this block will keep this isolate alive
+ /// until it is garbage collected by both Dart and ObjC. If the owner isolate
+ /// has shut down, and the block is invoked by native code, it may block
+ /// indefinitely, or have other undefined behavior.
+ static objc.ObjCBlock<ffi.Void Function(NSTimer)> blocking(
+ void Function(NSTimer) fn,
+ {bool keepIsolateAlive = true}) {
+ final raw = objc.newClosureBlock(
+ _ObjCBlock_ffiVoid_NSTimer_blockingCallable.nativeFunction.cast(),
+ (ffi.Pointer<objc.ObjCObject> arg0) =>
+ fn(NSTimer.castFromPointer(arg0, retain: false, release: true)),
+ keepIsolateAlive);
+ final rawListener = objc.newClosureBlock(
+ _ObjCBlock_ffiVoid_NSTimer_blockingListenerCallable.nativeFunction
+ .cast(),
+ (ffi.Pointer<objc.ObjCObject> arg0) =>
+ fn(NSTimer.castFromPointer(arg0, retain: false, release: true)),
+ keepIsolateAlive);
+ final wrapper = _ObjectiveCBindings_wrapBlockingBlock_xtuoz7(
+ raw, rawListener, objc.objCContext);
+ objc.objectRelease(raw.cast());
+ objc.objectRelease(rawListener.cast());
+ return objc.ObjCBlock<ffi.Void Function(NSTimer)>(wrapper,
+ retain: false, release: true);
+ }
+}
+
+/// Call operator for `objc.ObjCBlock<ffi.Void Function(NSTimer)>`.
+extension ObjCBlock_ffiVoid_NSTimer_CallExtension
+ on objc.ObjCBlock<ffi.Void Function(NSTimer)> {
+ void call(NSTimer arg0) => ref.pointer.ref.invoke
+ .cast<
+ ffi.NativeFunction<
+ ffi.Void Function(ffi.Pointer<objc.ObjCBlockImpl> block,
+ ffi.Pointer<objc.ObjCObject> arg0)>>()
+ .asFunction<
+ void Function(ffi.Pointer<objc.ObjCBlockImpl>,
+ ffi.Pointer<objc.ObjCObject>)>()(ref.pointer, arg0.ref.pointer);
+}
+
+void _ObjCBlock_ffiVoid_NSUInteger_bool_fnPtrTrampoline(
+ ffi.Pointer<objc.ObjCBlockImpl> block,
+ int arg0,
+ ffi.Pointer<ffi.Bool> arg1) =>
+ block.ref.target
+ .cast<
+ ffi.NativeFunction<
+ ffi.Void Function(
+ ffi.UnsignedLong arg0, ffi.Pointer<ffi.Bool> arg1)>>()
+ .asFunction<void Function(int, ffi.Pointer<ffi.Bool>)>()(arg0, arg1);
+ffi.Pointer<ffi.Void> _ObjCBlock_ffiVoid_NSUInteger_bool_fnPtrCallable =
+ ffi.Pointer.fromFunction<
+ ffi.Void Function(ffi.Pointer<objc.ObjCBlockImpl>,
+ ffi.UnsignedLong, ffi.Pointer<ffi.Bool>)>(
+ _ObjCBlock_ffiVoid_NSUInteger_bool_fnPtrTrampoline)
+ .cast();
+void _ObjCBlock_ffiVoid_NSUInteger_bool_closureTrampoline(
+ ffi.Pointer<objc.ObjCBlockImpl> block,
+ int arg0,
+ ffi.Pointer<ffi.Bool> arg1) =>
+ (objc.getBlockClosure(block) as void Function(int, ffi.Pointer<ffi.Bool>))(
+ arg0, arg1);
+ffi.Pointer<ffi.Void> _ObjCBlock_ffiVoid_NSUInteger_bool_closureCallable =
+ ffi.Pointer.fromFunction<
+ ffi.Void Function(ffi.Pointer<objc.ObjCBlockImpl>,
+ ffi.UnsignedLong, ffi.Pointer<ffi.Bool>)>(
+ _ObjCBlock_ffiVoid_NSUInteger_bool_closureTrampoline)
+ .cast();
+void _ObjCBlock_ffiVoid_NSUInteger_bool_listenerTrampoline(
+ ffi.Pointer<objc.ObjCBlockImpl> block,
+ int arg0,
+ ffi.Pointer<ffi.Bool> arg1) {
+ (objc.getBlockClosure(block) as void Function(int, ffi.Pointer<ffi.Bool>))(
+ arg0, arg1);
+ objc.objectRelease(block.cast());
+}
+
+ffi.NativeCallable<
+ ffi.Void Function(ffi.Pointer<objc.ObjCBlockImpl>, ffi.UnsignedLong,
+ ffi.Pointer<ffi.Bool>)>
+ _ObjCBlock_ffiVoid_NSUInteger_bool_listenerCallable = ffi.NativeCallable<
+ ffi.Void Function(ffi.Pointer<objc.ObjCBlockImpl>, ffi.UnsignedLong,
+ ffi.Pointer<ffi.Bool>)>.listener(
+ _ObjCBlock_ffiVoid_NSUInteger_bool_listenerTrampoline)
+ ..keepIsolateAlive = false;
+void _ObjCBlock_ffiVoid_NSUInteger_bool_blockingTrampoline(
+ ffi.Pointer<objc.ObjCBlockImpl> block,
+ ffi.Pointer<ffi.Void> waiter,
+ int arg0,
+ ffi.Pointer<ffi.Bool> arg1) {
+ try {
+ (objc.getBlockClosure(block) as void Function(int, ffi.Pointer<ffi.Bool>))(
+ arg0, arg1);
+ } catch (e) {
+ } finally {
+ objc.signalWaiter(waiter);
+ objc.objectRelease(block.cast());
+ }
+}
+
+ffi.NativeCallable<
+ ffi.Void Function(ffi.Pointer<objc.ObjCBlockImpl>,
+ ffi.Pointer<ffi.Void>, ffi.UnsignedLong, ffi.Pointer<ffi.Bool>)>
+ _ObjCBlock_ffiVoid_NSUInteger_bool_blockingCallable = ffi.NativeCallable<
+ ffi.Void Function(
+ ffi.Pointer<objc.ObjCBlockImpl>,
+ ffi.Pointer<ffi.Void>,
+ ffi.UnsignedLong,
+ ffi.Pointer<ffi.Bool>)>.isolateLocal(
+ _ObjCBlock_ffiVoid_NSUInteger_bool_blockingTrampoline)
+ ..keepIsolateAlive = false;
+ffi.NativeCallable<
+ ffi.Void Function(ffi.Pointer<objc.ObjCBlockImpl>,
+ ffi.Pointer<ffi.Void>, ffi.UnsignedLong, ffi.Pointer<ffi.Bool>)>
+ _ObjCBlock_ffiVoid_NSUInteger_bool_blockingListenerCallable = ffi
+ .NativeCallable<
+ ffi.Void Function(
+ ffi.Pointer<objc.ObjCBlockImpl>,
+ ffi.Pointer<ffi.Void>,
+ ffi.UnsignedLong,
+ ffi.Pointer<ffi.Bool>)>.listener(
+ _ObjCBlock_ffiVoid_NSUInteger_bool_blockingTrampoline)
+ ..keepIsolateAlive = false;
+
+/// Construction methods for `objc.ObjCBlock<ffi.Void Function(ffi.UnsignedLong, ffi.Pointer<ffi.Bool>)>`.
+abstract final class ObjCBlock_ffiVoid_NSUInteger_bool {
+ /// Returns a block that wraps the given raw block pointer.
+ static objc
+ .ObjCBlock<ffi.Void Function(ffi.UnsignedLong, ffi.Pointer<ffi.Bool>)>
+ castFromPointer(ffi.Pointer<objc.ObjCBlockImpl> pointer,
+ {bool retain = false, bool release = false}) =>
+ objc.ObjCBlock<
+ ffi.Void Function(ffi.UnsignedLong, ffi.Pointer<ffi.Bool>)>(
+ pointer,
+ retain: retain,
+ release: release);
+
+ /// Creates a block from a C function pointer.
+ ///
+ /// This block must be invoked by native code running on the same thread as
+ /// the isolate that registered it. Invoking the block on the wrong thread
+ /// will result in a crash.
+ static objc.ObjCBlock<
+ ffi.Void Function(ffi.UnsignedLong, ffi.Pointer<ffi.Bool>)> fromFunctionPointer(
+ ffi.Pointer<ffi.NativeFunction<ffi.Void Function(ffi.UnsignedLong arg0, ffi.Pointer<ffi.Bool> arg1)>>
+ ptr) =>
+ objc.ObjCBlock<ffi.Void Function(ffi.UnsignedLong, ffi.Pointer<ffi.Bool>)>(
+ objc.newPointerBlock(
+ _ObjCBlock_ffiVoid_NSUInteger_bool_fnPtrCallable, ptr.cast()),
+ retain: false,
+ release: true);
+
+ /// Creates a block from a Dart function.
+ ///
+ /// This block must be invoked by native code running on the same thread as
+ /// the isolate that registered it. Invoking the block on the wrong thread
+ /// will result in a crash.
+ ///
+ /// If `keepIsolateAlive` is true, this block will keep this isolate alive
+ /// until it is garbage collected by both Dart and ObjC.
+ static objc
+ .ObjCBlock<ffi.Void Function(ffi.UnsignedLong, ffi.Pointer<ffi.Bool>)>
+ fromFunction(void Function(int, ffi.Pointer<ffi.Bool>) fn,
+ {bool keepIsolateAlive = true}) =>
+ objc.ObjCBlock<
+ ffi.Void Function(ffi.UnsignedLong, ffi.Pointer<ffi.Bool>)>(
+ objc.newClosureBlock(
+ _ObjCBlock_ffiVoid_NSUInteger_bool_closureCallable,
+ (int arg0, ffi.Pointer<ffi.Bool> arg1) => fn(arg0, arg1),
+ keepIsolateAlive),
+ retain: false,
+ release: true);
+
+ /// Creates a listener block from a Dart function.
+ ///
+ /// This is based on FFI's NativeCallable.listener, and has the same
+ /// capabilities and limitations. This block can be invoked from any thread,
+ /// but only supports void functions, and is not run synchronously. See
+ /// NativeCallable.listener for more details.
+ ///
+ /// If `keepIsolateAlive` is true, this block will keep this isolate alive
+ /// until it is garbage collected by both Dart and ObjC.
+ static objc
+ .ObjCBlock<ffi.Void Function(ffi.UnsignedLong, ffi.Pointer<ffi.Bool>)>
+ listener(void Function(int, ffi.Pointer<ffi.Bool>) fn,
+ {bool keepIsolateAlive = true}) {
+ final raw = objc.newClosureBlock(
+ _ObjCBlock_ffiVoid_NSUInteger_bool_listenerCallable.nativeFunction
+ .cast(),
+ (int arg0, ffi.Pointer<ffi.Bool> arg1) => fn(arg0, arg1),
+ keepIsolateAlive);
+ final wrapper = _ObjectiveCBindings_wrapListenerBlock_q5jeyk(raw);
+ objc.objectRelease(raw.cast());
+ return objc.ObjCBlock<
+ ffi.Void Function(ffi.UnsignedLong, ffi.Pointer<ffi.Bool>)>(wrapper,
+ retain: false, release: true);
+ }
+
+ /// Creates a blocking block from a Dart function.
+ ///
+ /// This callback can be invoked from any native thread, and will block the
+ /// caller until the callback is handled by the Dart isolate that created
+ /// the block. Async functions are not supported.
+ ///
+ /// If `keepIsolateAlive` is true, this block will keep this isolate alive
+ /// until it is garbage collected by both Dart and ObjC. If the owner isolate
+ /// has shut down, and the block is invoked by native code, it may block
+ /// indefinitely, or have other undefined behavior.
+ static objc
+ .ObjCBlock<ffi.Void Function(ffi.UnsignedLong, ffi.Pointer<ffi.Bool>)>
+ blocking(void Function(int, ffi.Pointer<ffi.Bool>) fn,
+ {bool keepIsolateAlive = true}) {
+ final raw = objc.newClosureBlock(
+ _ObjCBlock_ffiVoid_NSUInteger_bool_blockingCallable.nativeFunction
+ .cast(),
+ (int arg0, ffi.Pointer<ffi.Bool> arg1) => fn(arg0, arg1),
+ keepIsolateAlive);
+ final rawListener = objc.newClosureBlock(
+ _ObjCBlock_ffiVoid_NSUInteger_bool_blockingListenerCallable
+ .nativeFunction
+ .cast(),
+ (int arg0, ffi.Pointer<ffi.Bool> arg1) => fn(arg0, arg1),
+ keepIsolateAlive);
+ final wrapper = _ObjectiveCBindings_wrapBlockingBlock_q5jeyk(
+ raw, rawListener, objc.objCContext);
+ objc.objectRelease(raw.cast());
+ objc.objectRelease(rawListener.cast());
+ return objc.ObjCBlock<
+ ffi.Void Function(ffi.UnsignedLong, ffi.Pointer<ffi.Bool>)>(wrapper,
+ retain: false, release: true);
+ }
+}
+
+/// Call operator for `objc.ObjCBlock<ffi.Void Function(ffi.UnsignedLong, ffi.Pointer<ffi.Bool>)>`.
+extension ObjCBlock_ffiVoid_NSUInteger_bool_CallExtension on objc
+ .ObjCBlock<ffi.Void Function(ffi.UnsignedLong, ffi.Pointer<ffi.Bool>)> {
+ void call(int arg0, ffi.Pointer<ffi.Bool> arg1) => ref.pointer.ref.invoke
+ .cast<
+ ffi.NativeFunction<
+ ffi.Void Function(ffi.Pointer<objc.ObjCBlockImpl> block,
+ ffi.UnsignedLong arg0, ffi.Pointer<ffi.Bool> arg1)>>()
+ .asFunction<
+ void Function(ffi.Pointer<objc.ObjCBlockImpl>, int,
+ ffi.Pointer<ffi.Bool>)>()(ref.pointer, arg0, arg1);
+}
+
+void _ObjCBlock_ffiVoid_NSURL_NSError_fnPtrTrampoline(
+ ffi.Pointer<objc.ObjCBlockImpl> block,
+ ffi.Pointer<objc.ObjCObject> arg0,
+ ffi.Pointer<objc.ObjCObject> arg1) =>
+ block.ref.target
+ .cast<
+ ffi.NativeFunction<
+ ffi.Void Function(ffi.Pointer<objc.ObjCObject> arg0,
+ ffi.Pointer<objc.ObjCObject> arg1)>>()
+ .asFunction<
+ void Function(ffi.Pointer<objc.ObjCObject>,
+ ffi.Pointer<objc.ObjCObject>)>()(arg0, arg1);
+ffi.Pointer<ffi.Void> _ObjCBlock_ffiVoid_NSURL_NSError_fnPtrCallable =
+ ffi.Pointer.fromFunction<
+ ffi.Void Function(
+ ffi.Pointer<objc.ObjCBlockImpl>,
+ ffi.Pointer<objc.ObjCObject>,
+ ffi.Pointer<objc.ObjCObject>)>(
+ _ObjCBlock_ffiVoid_NSURL_NSError_fnPtrTrampoline)
+ .cast();
+void _ObjCBlock_ffiVoid_NSURL_NSError_closureTrampoline(
+ ffi.Pointer<objc.ObjCBlockImpl> block,
+ ffi.Pointer<objc.ObjCObject> arg0,
+ ffi.Pointer<objc.ObjCObject> arg1) =>
+ (objc.getBlockClosure(block) as void Function(ffi.Pointer<objc.ObjCObject>,
+ ffi.Pointer<objc.ObjCObject>))(arg0, arg1);
+ffi.Pointer<ffi.Void> _ObjCBlock_ffiVoid_NSURL_NSError_closureCallable =
+ ffi.Pointer.fromFunction<
+ ffi.Void Function(
+ ffi.Pointer<objc.ObjCBlockImpl>,
+ ffi.Pointer<objc.ObjCObject>,
+ ffi.Pointer<objc.ObjCObject>)>(
+ _ObjCBlock_ffiVoid_NSURL_NSError_closureTrampoline)
+ .cast();
+void _ObjCBlock_ffiVoid_NSURL_NSError_listenerTrampoline(
+ ffi.Pointer<objc.ObjCBlockImpl> block,
+ ffi.Pointer<objc.ObjCObject> arg0,
+ ffi.Pointer<objc.ObjCObject> arg1) {
+ (objc.getBlockClosure(block) as void Function(
+ ffi.Pointer<objc.ObjCObject>, ffi.Pointer<objc.ObjCObject>))(arg0, arg1);
+ objc.objectRelease(block.cast());
+}
+
+ffi.NativeCallable<
+ ffi.Void Function(ffi.Pointer<objc.ObjCBlockImpl>,
+ ffi.Pointer<objc.ObjCObject>, ffi.Pointer<objc.ObjCObject>)>
+ _ObjCBlock_ffiVoid_NSURL_NSError_listenerCallable = ffi.NativeCallable<
+ ffi.Void Function(
+ ffi.Pointer<objc.ObjCBlockImpl>,
+ ffi.Pointer<objc.ObjCObject>,
+ ffi.Pointer<objc.ObjCObject>)>.listener(
+ _ObjCBlock_ffiVoid_NSURL_NSError_listenerTrampoline)
+ ..keepIsolateAlive = false;
+void _ObjCBlock_ffiVoid_NSURL_NSError_blockingTrampoline(
+ ffi.Pointer<objc.ObjCBlockImpl> block,
+ ffi.Pointer<ffi.Void> waiter,
+ ffi.Pointer<objc.ObjCObject> arg0,
+ ffi.Pointer<objc.ObjCObject> arg1) {
+ try {
+ (objc.getBlockClosure(block) as void Function(ffi.Pointer<objc.ObjCObject>,
+ ffi.Pointer<objc.ObjCObject>))(arg0, arg1);
+ } catch (e) {
+ } finally {
+ objc.signalWaiter(waiter);
+ objc.objectRelease(block.cast());
+ }
+}
+
+ffi.NativeCallable<
+ ffi.Void Function(
+ ffi.Pointer<objc.ObjCBlockImpl>,
+ ffi.Pointer<ffi.Void>,
+ ffi.Pointer<objc.ObjCObject>,
+ ffi.Pointer<objc.ObjCObject>)>
+ _ObjCBlock_ffiVoid_NSURL_NSError_blockingCallable = ffi.NativeCallable<
+ ffi.Void Function(
+ ffi.Pointer<objc.ObjCBlockImpl>,
+ ffi.Pointer<ffi.Void>,
+ ffi.Pointer<objc.ObjCObject>,
+ ffi.Pointer<objc.ObjCObject>)>.isolateLocal(
+ _ObjCBlock_ffiVoid_NSURL_NSError_blockingTrampoline)
+ ..keepIsolateAlive = false;
+ffi.NativeCallable<
+ ffi.Void Function(
+ ffi.Pointer<objc.ObjCBlockImpl>,
+ ffi.Pointer<ffi.Void>,
+ ffi.Pointer<objc.ObjCObject>,
+ ffi.Pointer<objc.ObjCObject>)>
+ _ObjCBlock_ffiVoid_NSURL_NSError_blockingListenerCallable = ffi
+ .NativeCallable<
+ ffi.Void Function(
+ ffi.Pointer<objc.ObjCBlockImpl>,
+ ffi.Pointer<ffi.Void>,
+ ffi.Pointer<objc.ObjCObject>,
+ ffi.Pointer<objc.ObjCObject>)>.listener(
+ _ObjCBlock_ffiVoid_NSURL_NSError_blockingTrampoline)
+ ..keepIsolateAlive = false;
+
+/// Construction methods for `objc.ObjCBlock<ffi.Void Function(NSURL?, NSError?)>`.
+abstract final class ObjCBlock_ffiVoid_NSURL_NSError {
+ /// Returns a block that wraps the given raw block pointer.
+ static objc.ObjCBlock<ffi.Void Function(NSURL?, NSError?)> castFromPointer(
+ ffi.Pointer<objc.ObjCBlockImpl> pointer,
+ {bool retain = false,
+ bool release = false}) =>
+ objc.ObjCBlock<ffi.Void Function(NSURL?, NSError?)>(pointer,
+ retain: retain, release: release);
+
+ /// Creates a block from a C function pointer.
+ ///
+ /// This block must be invoked by native code running on the same thread as
+ /// the isolate that registered it. Invoking the block on the wrong thread
+ /// will result in a crash.
+ static objc.ObjCBlock<ffi.Void Function(NSURL?, NSError?)> fromFunctionPointer(
+ ffi.Pointer<
+ ffi.NativeFunction<
+ ffi.Void Function(ffi.Pointer<objc.ObjCObject> arg0,
+ ffi.Pointer<objc.ObjCObject> arg1)>>
+ ptr) =>
+ objc.ObjCBlock<ffi.Void Function(NSURL?, NSError?)>(
+ objc.newPointerBlock(_ObjCBlock_ffiVoid_NSURL_NSError_fnPtrCallable, ptr.cast()),
+ retain: false,
+ release: true);
+
+ /// Creates a block from a Dart function.
+ ///
+ /// This block must be invoked by native code running on the same thread as
+ /// the isolate that registered it. Invoking the block on the wrong thread
+ /// will result in a crash.
+ ///
+ /// If `keepIsolateAlive` is true, this block will keep this isolate alive
+ /// until it is garbage collected by both Dart and ObjC.
+ static objc.ObjCBlock<ffi.Void Function(NSURL?, NSError?)> fromFunction(
+ void Function(NSURL?, NSError?) fn,
+ {bool keepIsolateAlive = true}) =>
+ objc.ObjCBlock<ffi.Void Function(NSURL?, NSError?)>(
+ objc.newClosureBlock(
+ _ObjCBlock_ffiVoid_NSURL_NSError_closureCallable,
+ (ffi.Pointer<objc.ObjCObject> arg0, ffi.Pointer<objc.ObjCObject> arg1) => fn(
+ arg0.address == 0
+ ? null
+ : NSURL.castFromPointer(arg0, retain: true, release: true),
+ arg1.address == 0 ? null : NSError.castFromPointer(arg1, retain: true, release: true)),
+ keepIsolateAlive),
+ retain: false,
+ release: true);
+
+ /// Creates a listener block from a Dart function.
+ ///
+ /// This is based on FFI's NativeCallable.listener, and has the same
+ /// capabilities and limitations. This block can be invoked from any thread,
+ /// but only supports void functions, and is not run synchronously. See
+ /// NativeCallable.listener for more details.
+ ///
+ /// If `keepIsolateAlive` is true, this block will keep this isolate alive
+ /// until it is garbage collected by both Dart and ObjC.
+ static objc.ObjCBlock<ffi.Void Function(NSURL?, NSError?)> listener(
+ void Function(NSURL?, NSError?) fn,
+ {bool keepIsolateAlive = true}) {
+ final raw = objc.newClosureBlock(
+ _ObjCBlock_ffiVoid_NSURL_NSError_listenerCallable.nativeFunction.cast(),
+ (ffi.Pointer<objc.ObjCObject> arg0,
+ ffi.Pointer<objc.ObjCObject> arg1) =>
+ fn(
+ arg0.address == 0
+ ? null
+ : NSURL.castFromPointer(arg0, retain: false, release: true),
+ arg1.address == 0
+ ? null
+ : NSError.castFromPointer(arg1,
+ retain: false, release: true)),
+ keepIsolateAlive);
+ final wrapper = _ObjectiveCBindings_wrapListenerBlock_pfv6jd(raw);
+ objc.objectRelease(raw.cast());
+ return objc.ObjCBlock<ffi.Void Function(NSURL?, NSError?)>(wrapper,
+ retain: false, release: true);
+ }
+
+ /// Creates a blocking block from a Dart function.
+ ///
+ /// This callback can be invoked from any native thread, and will block the
+ /// caller until the callback is handled by the Dart isolate that created
+ /// the block. Async functions are not supported.
+ ///
+ /// If `keepIsolateAlive` is true, this block will keep this isolate alive
+ /// until it is garbage collected by both Dart and ObjC. If the owner isolate
+ /// has shut down, and the block is invoked by native code, it may block
+ /// indefinitely, or have other undefined behavior.
+ static objc.ObjCBlock<ffi.Void Function(NSURL?, NSError?)> blocking(
+ void Function(NSURL?, NSError?) fn,
+ {bool keepIsolateAlive = true}) {
+ final raw = objc.newClosureBlock(
+ _ObjCBlock_ffiVoid_NSURL_NSError_blockingCallable.nativeFunction.cast(),
+ (ffi.Pointer<objc.ObjCObject> arg0,
+ ffi.Pointer<objc.ObjCObject> arg1) =>
+ fn(
+ arg0.address == 0
+ ? null
+ : NSURL.castFromPointer(arg0, retain: false, release: true),
+ arg1.address == 0
+ ? null
+ : NSError.castFromPointer(arg1,
+ retain: false, release: true)),
+ keepIsolateAlive);
+ final rawListener = objc.newClosureBlock(
+ _ObjCBlock_ffiVoid_NSURL_NSError_blockingListenerCallable.nativeFunction
+ .cast(),
+ (ffi.Pointer<objc.ObjCObject> arg0,
+ ffi.Pointer<objc.ObjCObject> arg1) =>
+ fn(
+ arg0.address == 0
+ ? null
+ : NSURL.castFromPointer(arg0, retain: false, release: true),
+ arg1.address == 0
+ ? null
+ : NSError.castFromPointer(arg1,
+ retain: false, release: true)),
+ keepIsolateAlive);
+ final wrapper = _ObjectiveCBindings_wrapBlockingBlock_pfv6jd(
+ raw, rawListener, objc.objCContext);
+ objc.objectRelease(raw.cast());
+ objc.objectRelease(rawListener.cast());
+ return objc.ObjCBlock<ffi.Void Function(NSURL?, NSError?)>(wrapper,
+ retain: false, release: true);
+ }
+}
+
+/// Call operator for `objc.ObjCBlock<ffi.Void Function(NSURL?, NSError?)>`.
+extension ObjCBlock_ffiVoid_NSURL_NSError_CallExtension
+ on objc.ObjCBlock<ffi.Void Function(NSURL?, NSError?)> {
+ void call(NSURL? arg0, NSError? arg1) => ref.pointer.ref.invoke
+ .cast<
+ ffi.NativeFunction<
+ ffi.Void Function(
+ ffi.Pointer<objc.ObjCBlockImpl> block,
+ ffi.Pointer<objc.ObjCObject> arg0,
+ ffi.Pointer<objc.ObjCObject> arg1)>>()
+ .asFunction<
+ void Function(
+ ffi.Pointer<objc.ObjCBlockImpl>,
+ ffi.Pointer<objc.ObjCObject>,
+ ffi.Pointer<objc.ObjCObject>)>()(ref.pointer,
+ arg0?.ref.pointer ?? ffi.nullptr, arg1?.ref.pointer ?? ffi.nullptr);
+}
+
+void _ObjCBlock_ffiVoid_NSURL_bool_NSError_fnPtrTrampoline(
+ ffi.Pointer<objc.ObjCBlockImpl> block,
+ ffi.Pointer<objc.ObjCObject> arg0,
+ bool arg1,
+ ffi.Pointer<objc.ObjCObject> arg2) =>
+ block.ref.target
+ .cast<
+ ffi.NativeFunction<
+ ffi.Void Function(ffi.Pointer<objc.ObjCObject> arg0,
+ ffi.Bool arg1, ffi.Pointer<objc.ObjCObject> arg2)>>()
+ .asFunction<
+ void Function(ffi.Pointer<objc.ObjCObject>, bool,
+ ffi.Pointer<objc.ObjCObject>)>()(arg0, arg1, arg2);
+ffi.Pointer<ffi.Void> _ObjCBlock_ffiVoid_NSURL_bool_NSError_fnPtrCallable =
+ ffi.Pointer.fromFunction<
+ ffi.Void Function(
+ ffi.Pointer<objc.ObjCBlockImpl>,
+ ffi.Pointer<objc.ObjCObject>,
+ ffi.Bool,
+ ffi.Pointer<objc.ObjCObject>)>(
+ _ObjCBlock_ffiVoid_NSURL_bool_NSError_fnPtrTrampoline)
+ .cast();
+void _ObjCBlock_ffiVoid_NSURL_bool_NSError_closureTrampoline(
+ ffi.Pointer<objc.ObjCBlockImpl> block,
+ ffi.Pointer<objc.ObjCObject> arg0,
+ bool arg1,
+ ffi.Pointer<objc.ObjCObject> arg2) =>
+ (objc.getBlockClosure(block) as void Function(ffi.Pointer<objc.ObjCObject>,
+ bool, ffi.Pointer<objc.ObjCObject>))(arg0, arg1, arg2);
+ffi.Pointer<ffi.Void> _ObjCBlock_ffiVoid_NSURL_bool_NSError_closureCallable =
+ ffi.Pointer.fromFunction<
+ ffi.Void Function(
+ ffi.Pointer<objc.ObjCBlockImpl>,
+ ffi.Pointer<objc.ObjCObject>,
+ ffi.Bool,
+ ffi.Pointer<objc.ObjCObject>)>(
+ _ObjCBlock_ffiVoid_NSURL_bool_NSError_closureTrampoline)
+ .cast();
+void _ObjCBlock_ffiVoid_NSURL_bool_NSError_listenerTrampoline(
+ ffi.Pointer<objc.ObjCBlockImpl> block,
+ ffi.Pointer<objc.ObjCObject> arg0,
+ bool arg1,
+ ffi.Pointer<objc.ObjCObject> arg2) {
+ (objc.getBlockClosure(block) as void Function(ffi.Pointer<objc.ObjCObject>,
+ bool, ffi.Pointer<objc.ObjCObject>))(arg0, arg1, arg2);
+ objc.objectRelease(block.cast());
+}
+
+ffi.NativeCallable<
+ ffi.Void Function(
+ ffi.Pointer<objc.ObjCBlockImpl>,
+ ffi.Pointer<objc.ObjCObject>,
+ ffi.Bool,
+ ffi.Pointer<objc.ObjCObject>)>
+ _ObjCBlock_ffiVoid_NSURL_bool_NSError_listenerCallable = ffi.NativeCallable<
+ ffi.Void Function(
+ ffi.Pointer<objc.ObjCBlockImpl>,
+ ffi.Pointer<objc.ObjCObject>,
+ ffi.Bool,
+ ffi.Pointer<objc.ObjCObject>)>.listener(
+ _ObjCBlock_ffiVoid_NSURL_bool_NSError_listenerTrampoline)
+ ..keepIsolateAlive = false;
+void _ObjCBlock_ffiVoid_NSURL_bool_NSError_blockingTrampoline(
+ ffi.Pointer<objc.ObjCBlockImpl> block,
+ ffi.Pointer<ffi.Void> waiter,
+ ffi.Pointer<objc.ObjCObject> arg0,
+ bool arg1,
+ ffi.Pointer<objc.ObjCObject> arg2) {
+ try {
+ (objc.getBlockClosure(block) as void Function(ffi.Pointer<objc.ObjCObject>,
+ bool, ffi.Pointer<objc.ObjCObject>))(arg0, arg1, arg2);
+ } catch (e) {
+ } finally {
+ objc.signalWaiter(waiter);
+ objc.objectRelease(block.cast());
+ }
+}
+
+ffi.NativeCallable<
+ ffi.Void Function(
+ ffi.Pointer<objc.ObjCBlockImpl>,
+ ffi.Pointer<ffi.Void>,
+ ffi.Pointer<objc.ObjCObject>,
+ ffi.Bool,
+ ffi.Pointer<objc.ObjCObject>)>
+ _ObjCBlock_ffiVoid_NSURL_bool_NSError_blockingCallable = ffi.NativeCallable<
+ ffi.Void Function(
+ ffi.Pointer<objc.ObjCBlockImpl>,
+ ffi.Pointer<ffi.Void>,
+ ffi.Pointer<objc.ObjCObject>,
+ ffi.Bool,
+ ffi.Pointer<objc.ObjCObject>)>.isolateLocal(
+ _ObjCBlock_ffiVoid_NSURL_bool_NSError_blockingTrampoline)
+ ..keepIsolateAlive = false;
+ffi.NativeCallable<
+ ffi.Void Function(
+ ffi.Pointer<objc.ObjCBlockImpl>,
+ ffi.Pointer<ffi.Void>,
+ ffi.Pointer<objc.ObjCObject>,
+ ffi.Bool,
+ ffi.Pointer<objc.ObjCObject>)>
+ _ObjCBlock_ffiVoid_NSURL_bool_NSError_blockingListenerCallable = ffi
+ .NativeCallable<
+ ffi.Void Function(
+ ffi.Pointer<objc.ObjCBlockImpl>,
+ ffi.Pointer<ffi.Void>,
+ ffi.Pointer<objc.ObjCObject>,
+ ffi.Bool,
+ ffi.Pointer<objc.ObjCObject>)>.listener(
+ _ObjCBlock_ffiVoid_NSURL_bool_NSError_blockingTrampoline)
+ ..keepIsolateAlive = false;
+
+/// Construction methods for `objc.ObjCBlock<ffi.Void Function(NSURL?, ffi.Bool, NSError?)>`.
+abstract final class ObjCBlock_ffiVoid_NSURL_bool_NSError {
+ /// Returns a block that wraps the given raw block pointer.
+ static objc.ObjCBlock<ffi.Void Function(NSURL?, ffi.Bool, NSError?)>
+ castFromPointer(ffi.Pointer<objc.ObjCBlockImpl> pointer,
+ {bool retain = false, bool release = false}) =>
+ objc.ObjCBlock<ffi.Void Function(NSURL?, ffi.Bool, NSError?)>(pointer,
+ retain: retain, release: release);
+
+ /// Creates a block from a C function pointer.
+ ///
+ /// This block must be invoked by native code running on the same thread as
+ /// the isolate that registered it. Invoking the block on the wrong thread
+ /// will result in a crash.
+ static objc.ObjCBlock<ffi.Void Function(NSURL?, ffi.Bool, NSError?)> fromFunctionPointer(
+ ffi.Pointer<
+ ffi.NativeFunction<
+ ffi.Void Function(ffi.Pointer<objc.ObjCObject> arg0,
+ ffi.Bool arg1, ffi.Pointer<objc.ObjCObject> arg2)>>
+ ptr) =>
+ objc.ObjCBlock<ffi.Void Function(NSURL?, ffi.Bool, NSError?)>(
+ objc.newPointerBlock(_ObjCBlock_ffiVoid_NSURL_bool_NSError_fnPtrCallable, ptr.cast()),
+ retain: false,
+ release: true);
+
+ /// Creates a block from a Dart function.
+ ///
+ /// This block must be invoked by native code running on the same thread as
+ /// the isolate that registered it. Invoking the block on the wrong thread
+ /// will result in a crash.
+ ///
+ /// If `keepIsolateAlive` is true, this block will keep this isolate alive
+ /// until it is garbage collected by both Dart and ObjC.
+ static objc.ObjCBlock<ffi.Void Function(NSURL?, ffi.Bool, NSError?)> fromFunction(
+ void Function(NSURL?, bool, NSError?) fn,
+ {bool keepIsolateAlive = true}) =>
+ objc.ObjCBlock<ffi.Void Function(NSURL?, ffi.Bool, NSError?)>(
+ objc.newClosureBlock(
+ _ObjCBlock_ffiVoid_NSURL_bool_NSError_closureCallable,
+ (ffi.Pointer<objc.ObjCObject> arg0, bool arg1, ffi.Pointer<objc.ObjCObject> arg2) => fn(
+ arg0.address == 0
+ ? null
+ : NSURL.castFromPointer(arg0, retain: true, release: true),
+ arg1,
+ arg2.address == 0 ? null : NSError.castFromPointer(arg2, retain: true, release: true)),
+ keepIsolateAlive),
+ retain: false,
+ release: true);
+
+ /// Creates a listener block from a Dart function.
+ ///
+ /// This is based on FFI's NativeCallable.listener, and has the same
+ /// capabilities and limitations. This block can be invoked from any thread,
+ /// but only supports void functions, and is not run synchronously. See
+ /// NativeCallable.listener for more details.
+ ///
+ /// If `keepIsolateAlive` is true, this block will keep this isolate alive
+ /// until it is garbage collected by both Dart and ObjC.
+ static objc.ObjCBlock<ffi.Void Function(NSURL?, ffi.Bool, NSError?)> listener(
+ void Function(NSURL?, bool, NSError?) fn,
+ {bool keepIsolateAlive = true}) {
+ final raw = objc.newClosureBlock(
+ _ObjCBlock_ffiVoid_NSURL_bool_NSError_listenerCallable.nativeFunction
+ .cast(),
+ (ffi.Pointer<objc.ObjCObject> arg0, bool arg1,
+ ffi.Pointer<objc.ObjCObject> arg2) =>
+ fn(
+ arg0.address == 0
+ ? null
+ : NSURL.castFromPointer(arg0, retain: false, release: true),
+ arg1,
+ arg2.address == 0
+ ? null
+ : NSError.castFromPointer(arg2,
+ retain: false, release: true)),
+ keepIsolateAlive);
+ final wrapper = _ObjectiveCBindings_wrapListenerBlock_rnu2c5(raw);
+ objc.objectRelease(raw.cast());
+ return objc.ObjCBlock<ffi.Void Function(NSURL?, ffi.Bool, NSError?)>(
+ wrapper,
+ retain: false,
+ release: true);
+ }
+
+ /// Creates a blocking block from a Dart function.
+ ///
+ /// This callback can be invoked from any native thread, and will block the
+ /// caller until the callback is handled by the Dart isolate that created
+ /// the block. Async functions are not supported.
+ ///
+ /// If `keepIsolateAlive` is true, this block will keep this isolate alive
+ /// until it is garbage collected by both Dart and ObjC. If the owner isolate
+ /// has shut down, and the block is invoked by native code, it may block
+ /// indefinitely, or have other undefined behavior.
+ static objc.ObjCBlock<ffi.Void Function(NSURL?, ffi.Bool, NSError?)> blocking(
+ void Function(NSURL?, bool, NSError?) fn,
+ {bool keepIsolateAlive = true}) {
+ final raw = objc.newClosureBlock(
+ _ObjCBlock_ffiVoid_NSURL_bool_NSError_blockingCallable.nativeFunction
+ .cast(),
+ (ffi.Pointer<objc.ObjCObject> arg0, bool arg1,
+ ffi.Pointer<objc.ObjCObject> arg2) =>
+ fn(
+ arg0.address == 0
+ ? null
+ : NSURL.castFromPointer(arg0, retain: false, release: true),
+ arg1,
+ arg2.address == 0
+ ? null
+ : NSError.castFromPointer(arg2,
+ retain: false, release: true)),
+ keepIsolateAlive);
+ final rawListener = objc.newClosureBlock(
+ _ObjCBlock_ffiVoid_NSURL_bool_NSError_blockingListenerCallable
+ .nativeFunction
+ .cast(),
+ (ffi.Pointer<objc.ObjCObject> arg0, bool arg1,
+ ffi.Pointer<objc.ObjCObject> arg2) =>
+ fn(
+ arg0.address == 0
+ ? null
+ : NSURL.castFromPointer(arg0, retain: false, release: true),
+ arg1,
+ arg2.address == 0
+ ? null
+ : NSError.castFromPointer(arg2,
+ retain: false, release: true)),
+ keepIsolateAlive);
+ final wrapper = _ObjectiveCBindings_wrapBlockingBlock_rnu2c5(
+ raw, rawListener, objc.objCContext);
+ objc.objectRelease(raw.cast());
+ objc.objectRelease(rawListener.cast());
+ return objc.ObjCBlock<ffi.Void Function(NSURL?, ffi.Bool, NSError?)>(
+ wrapper,
+ retain: false,
+ release: true);
+ }
+}
+
+/// Call operator for `objc.ObjCBlock<ffi.Void Function(NSURL?, ffi.Bool, NSError?)>`.
+extension ObjCBlock_ffiVoid_NSURL_bool_NSError_CallExtension
+ on objc.ObjCBlock<ffi.Void Function(NSURL?, ffi.Bool, NSError?)> {
+ void call(NSURL? arg0, bool arg1, NSError? arg2) => ref.pointer.ref.invoke
+ .cast<
+ ffi.NativeFunction<
+ ffi.Void Function(
+ ffi.Pointer<objc.ObjCBlockImpl> block,
+ ffi.Pointer<objc.ObjCObject> arg0,
+ ffi.Bool arg1,
+ ffi.Pointer<objc.ObjCObject> arg2)>>()
+ .asFunction<
+ void Function(
+ ffi.Pointer<objc.ObjCBlockImpl>,
+ ffi.Pointer<objc.ObjCObject>,
+ bool,
+ ffi.Pointer<objc.ObjCObject>)>()(ref.pointer,
+ arg0?.ref.pointer ?? ffi.nullptr, arg1, arg2?.ref.pointer ?? ffi.nullptr);
+}
+
+void _ObjCBlock_ffiVoid_ObjectType_NSUInteger_bool_fnPtrTrampoline(
+ ffi.Pointer<objc.ObjCBlockImpl> block,
+ ffi.Pointer<objc.ObjCObject> arg0,
+ int arg1,
+ ffi.Pointer<ffi.Bool> arg2) =>
+ block.ref.target
+ .cast<
+ ffi.NativeFunction<
+ ffi.Void Function(ffi.Pointer<objc.ObjCObject> arg0,
+ ffi.UnsignedLong arg1, ffi.Pointer<ffi.Bool> arg2)>>()
+ .asFunction<
+ void Function(ffi.Pointer<objc.ObjCObject>, int,
+ ffi.Pointer<ffi.Bool>)>()(arg0, arg1, arg2);
+ffi.Pointer<ffi.Void>
+ _ObjCBlock_ffiVoid_ObjectType_NSUInteger_bool_fnPtrCallable =
+ ffi.Pointer.fromFunction<
+ ffi.Void Function(
+ ffi.Pointer<objc.ObjCBlockImpl>,
+ ffi.Pointer<objc.ObjCObject>,
+ ffi.UnsignedLong,
+ ffi.Pointer<ffi.Bool>)>(
+ _ObjCBlock_ffiVoid_ObjectType_NSUInteger_bool_fnPtrTrampoline)
+ .cast();
+void _ObjCBlock_ffiVoid_ObjectType_NSUInteger_bool_closureTrampoline(
+ ffi.Pointer<objc.ObjCBlockImpl> block,
+ ffi.Pointer<objc.ObjCObject> arg0,
+ int arg1,
+ ffi.Pointer<ffi.Bool> arg2) =>
+ (objc.getBlockClosure(block) as void Function(ffi.Pointer<objc.ObjCObject>,
+ int, ffi.Pointer<ffi.Bool>))(arg0, arg1, arg2);
+ffi.Pointer<ffi.Void>
+ _ObjCBlock_ffiVoid_ObjectType_NSUInteger_bool_closureCallable =
+ ffi.Pointer.fromFunction<
+ ffi.Void Function(
+ ffi.Pointer<objc.ObjCBlockImpl>,
+ ffi.Pointer<objc.ObjCObject>,
+ ffi.UnsignedLong,
+ ffi.Pointer<ffi.Bool>)>(
+ _ObjCBlock_ffiVoid_ObjectType_NSUInteger_bool_closureTrampoline)
+ .cast();
+void _ObjCBlock_ffiVoid_ObjectType_NSUInteger_bool_listenerTrampoline(
+ ffi.Pointer<objc.ObjCBlockImpl> block,
+ ffi.Pointer<objc.ObjCObject> arg0,
+ int arg1,
+ ffi.Pointer<ffi.Bool> arg2) {
+ (objc.getBlockClosure(block) as void Function(ffi.Pointer<objc.ObjCObject>,
+ int, ffi.Pointer<ffi.Bool>))(arg0, arg1, arg2);
+ objc.objectRelease(block.cast());
+}
+
+ffi.NativeCallable<
+ ffi.Void Function(
+ ffi.Pointer<objc.ObjCBlockImpl>,
+ ffi.Pointer<objc.ObjCObject>,
+ ffi.UnsignedLong,
+ ffi.Pointer<ffi.Bool>)>
+ _ObjCBlock_ffiVoid_ObjectType_NSUInteger_bool_listenerCallable = ffi
+ .NativeCallable<
+ ffi.Void Function(
+ ffi.Pointer<objc.ObjCBlockImpl>,
+ ffi.Pointer<objc.ObjCObject>,
+ ffi.UnsignedLong,
+ ffi.Pointer<ffi.Bool>)>.listener(
+ _ObjCBlock_ffiVoid_ObjectType_NSUInteger_bool_listenerTrampoline)
+ ..keepIsolateAlive = false;
+void _ObjCBlock_ffiVoid_ObjectType_NSUInteger_bool_blockingTrampoline(
+ ffi.Pointer<objc.ObjCBlockImpl> block,
+ ffi.Pointer<ffi.Void> waiter,
+ ffi.Pointer<objc.ObjCObject> arg0,
+ int arg1,
+ ffi.Pointer<ffi.Bool> arg2) {
+ try {
+ (objc.getBlockClosure(block) as void Function(ffi.Pointer<objc.ObjCObject>,
+ int, ffi.Pointer<ffi.Bool>))(arg0, arg1, arg2);
+ } catch (e) {
+ } finally {
+ objc.signalWaiter(waiter);
+ objc.objectRelease(block.cast());
+ }
+}
+
+ffi.NativeCallable<
+ ffi.Void Function(
+ ffi.Pointer<objc.ObjCBlockImpl>,
+ ffi.Pointer<ffi.Void>,
+ ffi.Pointer<objc.ObjCObject>,
+ ffi.UnsignedLong,
+ ffi.Pointer<ffi.Bool>)>
+ _ObjCBlock_ffiVoid_ObjectType_NSUInteger_bool_blockingCallable =
+ ffi.NativeCallable<
+ ffi.Void Function(
+ ffi.Pointer<objc.ObjCBlockImpl>,
+ ffi.Pointer<ffi.Void>,
+ ffi.Pointer<objc.ObjCObject>,
+ ffi.UnsignedLong,
+ ffi.Pointer<ffi.Bool>)>.isolateLocal(
+ _ObjCBlock_ffiVoid_ObjectType_NSUInteger_bool_blockingTrampoline)
+ ..keepIsolateAlive = false;
+ffi.NativeCallable<
+ ffi.Void Function(
+ ffi.Pointer<objc.ObjCBlockImpl>,
+ ffi.Pointer<ffi.Void>,
+ ffi.Pointer<objc.ObjCObject>,
+ ffi.UnsignedLong,
+ ffi.Pointer<ffi.Bool>)>
+ _ObjCBlock_ffiVoid_ObjectType_NSUInteger_bool_blockingListenerCallable =
+ ffi.NativeCallable<
+ ffi.Void Function(
+ ffi.Pointer<objc.ObjCBlockImpl>,
+ ffi.Pointer<ffi.Void>,
+ ffi.Pointer<objc.ObjCObject>,
+ ffi.UnsignedLong,
+ ffi.Pointer<ffi.Bool>)>.listener(
+ _ObjCBlock_ffiVoid_ObjectType_NSUInteger_bool_blockingTrampoline)
+ ..keepIsolateAlive = false;
+
+/// Construction methods for `objc.ObjCBlock<ffi.Void Function(ffi.Pointer<objc.ObjCObject>, ffi.UnsignedLong, ffi.Pointer<ffi.Bool>)>`.
+abstract final class ObjCBlock_ffiVoid_ObjectType_NSUInteger_bool {
+ /// Returns a block that wraps the given raw block pointer.
+ static objc.ObjCBlock<
+ ffi.Void Function(ffi.Pointer<objc.ObjCObject>, ffi.UnsignedLong,
+ ffi.Pointer<ffi.Bool>)>
+ castFromPointer(ffi.Pointer<objc.ObjCBlockImpl> pointer,
+ {bool retain = false, bool release = false}) =>
+ objc.ObjCBlock<
+ ffi.Void Function(ffi.Pointer<objc.ObjCObject>,
+ ffi.UnsignedLong, ffi.Pointer<ffi.Bool>)>(pointer,
+ retain: retain, release: release);
+
+ /// Creates a block from a C function pointer.
+ ///
+ /// This block must be invoked by native code running on the same thread as
+ /// the isolate that registered it. Invoking the block on the wrong thread
+ /// will result in a crash.
+ static objc
+ .ObjCBlock<ffi.Void Function(ffi.Pointer<objc.ObjCObject>, ffi.UnsignedLong, ffi.Pointer<ffi.Bool>)>
+ fromFunctionPointer(ffi.Pointer<ffi.NativeFunction<ffi.Void Function(ffi.Pointer<objc.ObjCObject> arg0, ffi.UnsignedLong arg1, ffi.Pointer<ffi.Bool> arg2)>> ptr) =>
+ objc.ObjCBlock<
+ ffi.Void Function(ffi.Pointer<objc.ObjCObject>,
+ ffi.UnsignedLong, ffi.Pointer<ffi.Bool>)>(
+ objc.newPointerBlock(
+ _ObjCBlock_ffiVoid_ObjectType_NSUInteger_bool_fnPtrCallable,
+ ptr.cast()),
+ retain: false,
+ release: true);
+
+ /// Creates a block from a Dart function.
+ ///
+ /// This block must be invoked by native code running on the same thread as
+ /// the isolate that registered it. Invoking the block on the wrong thread
+ /// will result in a crash.
+ ///
+ /// If `keepIsolateAlive` is true, this block will keep this isolate alive
+ /// until it is garbage collected by both Dart and ObjC.
+ static objc
+ .ObjCBlock<ffi.Void Function(ffi.Pointer<objc.ObjCObject>, ffi.UnsignedLong, ffi.Pointer<ffi.Bool>)>
+ fromFunction(
+ void Function(objc.ObjCObjectBase, int, ffi.Pointer<ffi.Bool>) fn,
+ {bool keepIsolateAlive = true}) =>
+ objc.ObjCBlock<ffi.Void Function(ffi.Pointer<objc.ObjCObject>, ffi.UnsignedLong, ffi.Pointer<ffi.Bool>)>(
+ objc.newClosureBlock(
+ _ObjCBlock_ffiVoid_ObjectType_NSUInteger_bool_closureCallable,
+ (ffi.Pointer<objc.ObjCObject> arg0, int arg1,
+ ffi.Pointer<ffi.Bool> arg2) =>
+ fn(objc.ObjCObjectBase(arg0, retain: true, release: true), arg1, arg2),
+ keepIsolateAlive),
+ retain: false,
+ release: true);
+
+ /// Creates a listener block from a Dart function.
+ ///
+ /// This is based on FFI's NativeCallable.listener, and has the same
+ /// capabilities and limitations. This block can be invoked from any thread,
+ /// but only supports void functions, and is not run synchronously. See
+ /// NativeCallable.listener for more details.
+ ///
+ /// If `keepIsolateAlive` is true, this block will keep this isolate alive
+ /// until it is garbage collected by both Dart and ObjC.
+ static objc.ObjCBlock<
+ ffi.Void Function(ffi.Pointer<objc.ObjCObject>, ffi.UnsignedLong,
+ ffi.Pointer<ffi.Bool>)> listener(
+ void Function(objc.ObjCObjectBase, int, ffi.Pointer<ffi.Bool>) fn,
+ {bool keepIsolateAlive = true}) {
+ final raw = objc.newClosureBlock(
+ _ObjCBlock_ffiVoid_ObjectType_NSUInteger_bool_listenerCallable
+ .nativeFunction
+ .cast(),
+ (ffi.Pointer<objc.ObjCObject> arg0, int arg1,
+ ffi.Pointer<ffi.Bool> arg2) =>
+ fn(objc.ObjCObjectBase(arg0, retain: false, release: true), arg1,
+ arg2),
+ keepIsolateAlive);
+ final wrapper = _ObjectiveCBindings_wrapListenerBlock_1p9ui4q(raw);
+ objc.objectRelease(raw.cast());
+ return objc.ObjCBlock<
+ ffi.Void Function(ffi.Pointer<objc.ObjCObject>, ffi.UnsignedLong,
+ ffi.Pointer<ffi.Bool>)>(wrapper, retain: false, release: true);
+ }
+
+ /// Creates a blocking block from a Dart function.
+ ///
+ /// This callback can be invoked from any native thread, and will block the
+ /// caller until the callback is handled by the Dart isolate that created
+ /// the block. Async functions are not supported.
+ ///
+ /// If `keepIsolateAlive` is true, this block will keep this isolate alive
+ /// until it is garbage collected by both Dart and ObjC. If the owner isolate
+ /// has shut down, and the block is invoked by native code, it may block
+ /// indefinitely, or have other undefined behavior.
+ static objc.ObjCBlock<
+ ffi.Void Function(ffi.Pointer<objc.ObjCObject>, ffi.UnsignedLong,
+ ffi.Pointer<ffi.Bool>)> blocking(
+ void Function(objc.ObjCObjectBase, int, ffi.Pointer<ffi.Bool>) fn,
+ {bool keepIsolateAlive = true}) {
+ final raw = objc.newClosureBlock(
+ _ObjCBlock_ffiVoid_ObjectType_NSUInteger_bool_blockingCallable
+ .nativeFunction
+ .cast(),
+ (ffi.Pointer<objc.ObjCObject> arg0, int arg1,
+ ffi.Pointer<ffi.Bool> arg2) =>
+ fn(objc.ObjCObjectBase(arg0, retain: false, release: true), arg1,
+ arg2),
+ keepIsolateAlive);
+ final rawListener = objc.newClosureBlock(
+ _ObjCBlock_ffiVoid_ObjectType_NSUInteger_bool_blockingListenerCallable
+ .nativeFunction
+ .cast(),
+ (ffi.Pointer<objc.ObjCObject> arg0, int arg1,
+ ffi.Pointer<ffi.Bool> arg2) =>
+ fn(objc.ObjCObjectBase(arg0, retain: false, release: true), arg1,
+ arg2),
+ keepIsolateAlive);
+ final wrapper = _ObjectiveCBindings_wrapBlockingBlock_1p9ui4q(
+ raw, rawListener, objc.objCContext);
+ objc.objectRelease(raw.cast());
+ objc.objectRelease(rawListener.cast());
+ return objc.ObjCBlock<
+ ffi.Void Function(ffi.Pointer<objc.ObjCObject>, ffi.UnsignedLong,
+ ffi.Pointer<ffi.Bool>)>(wrapper, retain: false, release: true);
+ }
+}
+
+/// Call operator for `objc.ObjCBlock<ffi.Void Function(ffi.Pointer<objc.ObjCObject>, ffi.UnsignedLong, ffi.Pointer<ffi.Bool>)>`.
+extension ObjCBlock_ffiVoid_ObjectType_NSUInteger_bool_CallExtension
+ on objc.ObjCBlock<
+ ffi.Void Function(ffi.Pointer<objc.ObjCObject>, ffi.UnsignedLong,
+ ffi.Pointer<ffi.Bool>)> {
+ void call(objc.ObjCObjectBase arg0, int arg1, ffi.Pointer<ffi.Bool> arg2) =>
+ ref.pointer.ref.invoke
+ .cast<
+ ffi.NativeFunction<
+ ffi.Void Function(
+ ffi.Pointer<objc.ObjCBlockImpl> block,
+ ffi.Pointer<objc.ObjCObject> arg0,
+ ffi.UnsignedLong arg1,
+ ffi.Pointer<ffi.Bool> arg2)>>()
+ .asFunction<
+ void Function(
+ ffi.Pointer<objc.ObjCBlockImpl>,
+ ffi.Pointer<objc.ObjCObject>,
+ int,
+ ffi.Pointer<ffi.Bool>)>()(
+ ref.pointer, arg0.ref.pointer, arg1, arg2);
+}
+
+void _ObjCBlock_ffiVoid_ObjectType_bool_fnPtrTrampoline(
+ ffi.Pointer<objc.ObjCBlockImpl> block,
+ ffi.Pointer<objc.ObjCObject> arg0,
+ ffi.Pointer<ffi.Bool> arg1) =>
+ block.ref.target
+ .cast<
+ ffi.NativeFunction<
+ ffi.Void Function(ffi.Pointer<objc.ObjCObject> arg0,
+ ffi.Pointer<ffi.Bool> arg1)>>()
+ .asFunction<
+ void Function(ffi.Pointer<objc.ObjCObject>,
+ ffi.Pointer<ffi.Bool>)>()(arg0, arg1);
+ffi.Pointer<ffi.Void> _ObjCBlock_ffiVoid_ObjectType_bool_fnPtrCallable =
+ ffi.Pointer.fromFunction<
+ ffi.Void Function(ffi.Pointer<objc.ObjCBlockImpl>,
+ ffi.Pointer<objc.ObjCObject>, ffi.Pointer<ffi.Bool>)>(
+ _ObjCBlock_ffiVoid_ObjectType_bool_fnPtrTrampoline)
+ .cast();
+void _ObjCBlock_ffiVoid_ObjectType_bool_closureTrampoline(
+ ffi.Pointer<objc.ObjCBlockImpl> block,
+ ffi.Pointer<objc.ObjCObject> arg0,
+ ffi.Pointer<ffi.Bool> arg1) =>
+ (objc.getBlockClosure(block) as void Function(
+ ffi.Pointer<objc.ObjCObject>, ffi.Pointer<ffi.Bool>))(arg0, arg1);
+ffi.Pointer<ffi.Void> _ObjCBlock_ffiVoid_ObjectType_bool_closureCallable =
+ ffi.Pointer.fromFunction<
+ ffi.Void Function(ffi.Pointer<objc.ObjCBlockImpl>,
+ ffi.Pointer<objc.ObjCObject>, ffi.Pointer<ffi.Bool>)>(
+ _ObjCBlock_ffiVoid_ObjectType_bool_closureTrampoline)
+ .cast();
+void _ObjCBlock_ffiVoid_ObjectType_bool_listenerTrampoline(
+ ffi.Pointer<objc.ObjCBlockImpl> block,
+ ffi.Pointer<objc.ObjCObject> arg0,
+ ffi.Pointer<ffi.Bool> arg1) {
+ (objc.getBlockClosure(block) as void Function(
+ ffi.Pointer<objc.ObjCObject>, ffi.Pointer<ffi.Bool>))(arg0, arg1);
+ objc.objectRelease(block.cast());
+}
+
+ffi.NativeCallable<
+ ffi.Void Function(ffi.Pointer<objc.ObjCBlockImpl>,
+ ffi.Pointer<objc.ObjCObject>, ffi.Pointer<ffi.Bool>)>
+ _ObjCBlock_ffiVoid_ObjectType_bool_listenerCallable = ffi.NativeCallable<
+ ffi.Void Function(ffi.Pointer<objc.ObjCBlockImpl>,
+ ffi.Pointer<objc.ObjCObject>, ffi.Pointer<ffi.Bool>)>.listener(
+ _ObjCBlock_ffiVoid_ObjectType_bool_listenerTrampoline)
+ ..keepIsolateAlive = false;
+void _ObjCBlock_ffiVoid_ObjectType_bool_blockingTrampoline(
+ ffi.Pointer<objc.ObjCBlockImpl> block,
+ ffi.Pointer<ffi.Void> waiter,
+ ffi.Pointer<objc.ObjCObject> arg0,
+ ffi.Pointer<ffi.Bool> arg1) {
+ try {
+ (objc.getBlockClosure(block) as void Function(
+ ffi.Pointer<objc.ObjCObject>, ffi.Pointer<ffi.Bool>))(arg0, arg1);
+ } catch (e) {
+ } finally {
+ objc.signalWaiter(waiter);
+ objc.objectRelease(block.cast());
+ }
+}
+
+ffi.NativeCallable<
+ ffi.Void Function(
+ ffi.Pointer<objc.ObjCBlockImpl>,
+ ffi.Pointer<ffi.Void>,
+ ffi.Pointer<objc.ObjCObject>,
+ ffi.Pointer<ffi.Bool>)>
+ _ObjCBlock_ffiVoid_ObjectType_bool_blockingCallable = ffi.NativeCallable<
+ ffi.Void Function(
+ ffi.Pointer<objc.ObjCBlockImpl>,
+ ffi.Pointer<ffi.Void>,
+ ffi.Pointer<objc.ObjCObject>,
+ ffi.Pointer<ffi.Bool>)>.isolateLocal(
+ _ObjCBlock_ffiVoid_ObjectType_bool_blockingTrampoline)
+ ..keepIsolateAlive = false;
+ffi.NativeCallable<
+ ffi.Void Function(
+ ffi.Pointer<objc.ObjCBlockImpl>,
+ ffi.Pointer<ffi.Void>,
+ ffi.Pointer<objc.ObjCObject>,
+ ffi.Pointer<ffi.Bool>)>
+ _ObjCBlock_ffiVoid_ObjectType_bool_blockingListenerCallable = ffi
+ .NativeCallable<
+ ffi.Void Function(
+ ffi.Pointer<objc.ObjCBlockImpl>,
+ ffi.Pointer<ffi.Void>,
+ ffi.Pointer<objc.ObjCObject>,
+ ffi.Pointer<ffi.Bool>)>.listener(
+ _ObjCBlock_ffiVoid_ObjectType_bool_blockingTrampoline)
+ ..keepIsolateAlive = false;
+
+/// Construction methods for `objc.ObjCBlock<ffi.Void Function(ffi.Pointer<objc.ObjCObject>, ffi.Pointer<ffi.Bool>)>`.
+abstract final class ObjCBlock_ffiVoid_ObjectType_bool {
+ /// Returns a block that wraps the given raw block pointer.
+ static objc.ObjCBlock<
+ ffi.Void Function(
+ ffi.Pointer<objc.ObjCObject>, ffi.Pointer<ffi.Bool>)>
+ castFromPointer(ffi.Pointer<objc.ObjCBlockImpl> pointer,
+ {bool retain = false, bool release = false}) =>
+ objc.ObjCBlock<
+ ffi.Void Function(
+ ffi.Pointer<objc.ObjCObject>, ffi.Pointer<ffi.Bool>)>(
+ pointer,
+ retain: retain,
+ release: release);
+
+ /// Creates a block from a C function pointer.
+ ///
+ /// This block must be invoked by native code running on the same thread as
+ /// the isolate that registered it. Invoking the block on the wrong thread
+ /// will result in a crash.
+ static objc.ObjCBlock<ffi.Void Function(ffi.Pointer<objc.ObjCObject>, ffi.Pointer<ffi.Bool>)> fromFunctionPointer(
+ ffi.Pointer<
+ ffi.NativeFunction<
+ ffi.Void Function(ffi.Pointer<objc.ObjCObject> arg0,
+ ffi.Pointer<ffi.Bool> arg1)>>
+ ptr) =>
+ objc.ObjCBlock<ffi.Void Function(ffi.Pointer<objc.ObjCObject>, ffi.Pointer<ffi.Bool>)>(
+ objc.newPointerBlock(_ObjCBlock_ffiVoid_ObjectType_bool_fnPtrCallable, ptr.cast()),
+ retain: false,
+ release: true);
+
+ /// Creates a block from a Dart function.
+ ///
+ /// This block must be invoked by native code running on the same thread as
+ /// the isolate that registered it. Invoking the block on the wrong thread
+ /// will result in a crash.
+ ///
+ /// If `keepIsolateAlive` is true, this block will keep this isolate alive
+ /// until it is garbage collected by both Dart and ObjC.
+ static objc.ObjCBlock<
+ ffi.Void Function(ffi.Pointer<objc.ObjCObject>, ffi.Pointer<ffi.Bool>)> fromFunction(
+ void Function(objc.ObjCObjectBase, ffi.Pointer<ffi.Bool>) fn,
+ {bool keepIsolateAlive = true}) =>
+ objc.ObjCBlock<ffi.Void Function(ffi.Pointer<objc.ObjCObject>, ffi.Pointer<ffi.Bool>)>(
+ objc.newClosureBlock(
+ _ObjCBlock_ffiVoid_ObjectType_bool_closureCallable,
+ (ffi.Pointer<objc.ObjCObject> arg0, ffi.Pointer<ffi.Bool> arg1) =>
+ fn(objc.ObjCObjectBase(arg0, retain: true, release: true), arg1),
+ keepIsolateAlive),
+ retain: false,
+ release: true);
+
+ /// Creates a listener block from a Dart function.
+ ///
+ /// This is based on FFI's NativeCallable.listener, and has the same
+ /// capabilities and limitations. This block can be invoked from any thread,
+ /// but only supports void functions, and is not run synchronously. See
+ /// NativeCallable.listener for more details.
+ ///
+ /// If `keepIsolateAlive` is true, this block will keep this isolate alive
+ /// until it is garbage collected by both Dart and ObjC.
+ static objc.ObjCBlock<
+ ffi.Void Function(
+ ffi.Pointer<objc.ObjCObject>, ffi.Pointer<ffi.Bool>)> listener(
+ void Function(objc.ObjCObjectBase, ffi.Pointer<ffi.Bool>) fn,
+ {bool keepIsolateAlive = true}) {
+ final raw = objc.newClosureBlock(
+ _ObjCBlock_ffiVoid_ObjectType_bool_listenerCallable.nativeFunction
+ .cast(),
+ (ffi.Pointer<objc.ObjCObject> arg0, ffi.Pointer<ffi.Bool> arg1) =>
+ fn(objc.ObjCObjectBase(arg0, retain: false, release: true), arg1),
+ keepIsolateAlive);
+ final wrapper = _ObjectiveCBindings_wrapListenerBlock_t8l8el(raw);
+ objc.objectRelease(raw.cast());
+ return objc.ObjCBlock<
+ ffi.Void Function(ffi.Pointer<objc.ObjCObject>,
+ ffi.Pointer<ffi.Bool>)>(wrapper, retain: false, release: true);
+ }
+
+ /// Creates a blocking block from a Dart function.
+ ///
+ /// This callback can be invoked from any native thread, and will block the
+ /// caller until the callback is handled by the Dart isolate that created
+ /// the block. Async functions are not supported.
+ ///
+ /// If `keepIsolateAlive` is true, this block will keep this isolate alive
+ /// until it is garbage collected by both Dart and ObjC. If the owner isolate
+ /// has shut down, and the block is invoked by native code, it may block
+ /// indefinitely, or have other undefined behavior.
+ static objc.ObjCBlock<
+ ffi.Void Function(
+ ffi.Pointer<objc.ObjCObject>, ffi.Pointer<ffi.Bool>)> blocking(
+ void Function(objc.ObjCObjectBase, ffi.Pointer<ffi.Bool>) fn,
+ {bool keepIsolateAlive = true}) {
+ final raw = objc.newClosureBlock(
+ _ObjCBlock_ffiVoid_ObjectType_bool_blockingCallable.nativeFunction
+ .cast(),
+ (ffi.Pointer<objc.ObjCObject> arg0, ffi.Pointer<ffi.Bool> arg1) =>
+ fn(objc.ObjCObjectBase(arg0, retain: false, release: true), arg1),
+ keepIsolateAlive);
+ final rawListener = objc.newClosureBlock(
+ _ObjCBlock_ffiVoid_ObjectType_bool_blockingListenerCallable
+ .nativeFunction
+ .cast(),
+ (ffi.Pointer<objc.ObjCObject> arg0, ffi.Pointer<ffi.Bool> arg1) =>
+ fn(objc.ObjCObjectBase(arg0, retain: false, release: true), arg1),
+ keepIsolateAlive);
+ final wrapper = _ObjectiveCBindings_wrapBlockingBlock_t8l8el(
+ raw, rawListener, objc.objCContext);
+ objc.objectRelease(raw.cast());
+ objc.objectRelease(rawListener.cast());
+ return objc.ObjCBlock<
+ ffi.Void Function(ffi.Pointer<objc.ObjCObject>,
+ ffi.Pointer<ffi.Bool>)>(wrapper, retain: false, release: true);
+ }
+}
+
+/// Call operator for `objc.ObjCBlock<ffi.Void Function(ffi.Pointer<objc.ObjCObject>, ffi.Pointer<ffi.Bool>)>`.
+extension ObjCBlock_ffiVoid_ObjectType_bool_CallExtension on objc.ObjCBlock<
+ ffi.Void Function(ffi.Pointer<objc.ObjCObject>, ffi.Pointer<ffi.Bool>)> {
+ void call(objc.ObjCObjectBase arg0, ffi.Pointer<ffi.Bool> arg1) => ref
+ .pointer.ref.invoke
+ .cast<
+ ffi.NativeFunction<
+ ffi.Void Function(
+ ffi.Pointer<objc.ObjCBlockImpl> block,
+ ffi.Pointer<objc.ObjCObject> arg0,
+ ffi.Pointer<ffi.Bool> arg1)>>()
+ .asFunction<
+ void Function(
+ ffi.Pointer<objc.ObjCBlockImpl>,
+ ffi.Pointer<objc.ObjCObject>,
+ ffi.Pointer<ffi.Bool>)>()(ref.pointer, arg0.ref.pointer, arg1);
+}
+
void _ObjCBlock_ffiVoid_ffiVoid_fnPtrTrampoline(
ffi.Pointer<objc.ObjCBlockImpl> block, ffi.Pointer<ffi.Void> arg0) =>
block.ref.target
@@ -15572,6 +21414,255 @@
ref.pointer, arg0, arg1.ref.pointer);
}
+void _ObjCBlock_ffiVoid_ffiVoid_NSRange_bool_fnPtrTrampoline(
+ ffi.Pointer<objc.ObjCBlockImpl> block,
+ ffi.Pointer<ffi.Void> arg0,
+ NSRange arg1,
+ ffi.Pointer<ffi.Bool> arg2) =>
+ block.ref.target
+ .cast<
+ ffi.NativeFunction<
+ ffi.Void Function(ffi.Pointer<ffi.Void> arg0, NSRange arg1,
+ ffi.Pointer<ffi.Bool> arg2)>>()
+ .asFunction<
+ void Function(ffi.Pointer<ffi.Void>, NSRange,
+ ffi.Pointer<ffi.Bool>)>()(arg0, arg1, arg2);
+ffi.Pointer<ffi.Void> _ObjCBlock_ffiVoid_ffiVoid_NSRange_bool_fnPtrCallable =
+ ffi.Pointer.fromFunction<
+ ffi.Void Function(ffi.Pointer<objc.ObjCBlockImpl>,
+ ffi.Pointer<ffi.Void>, NSRange, ffi.Pointer<ffi.Bool>)>(
+ _ObjCBlock_ffiVoid_ffiVoid_NSRange_bool_fnPtrTrampoline)
+ .cast();
+void _ObjCBlock_ffiVoid_ffiVoid_NSRange_bool_closureTrampoline(
+ ffi.Pointer<objc.ObjCBlockImpl> block,
+ ffi.Pointer<ffi.Void> arg0,
+ NSRange arg1,
+ ffi.Pointer<ffi.Bool> arg2) =>
+ (objc.getBlockClosure(block) as void Function(ffi.Pointer<ffi.Void>,
+ NSRange, ffi.Pointer<ffi.Bool>))(arg0, arg1, arg2);
+ffi.Pointer<ffi.Void> _ObjCBlock_ffiVoid_ffiVoid_NSRange_bool_closureCallable =
+ ffi.Pointer.fromFunction<
+ ffi.Void Function(ffi.Pointer<objc.ObjCBlockImpl>,
+ ffi.Pointer<ffi.Void>, NSRange, ffi.Pointer<ffi.Bool>)>(
+ _ObjCBlock_ffiVoid_ffiVoid_NSRange_bool_closureTrampoline)
+ .cast();
+void _ObjCBlock_ffiVoid_ffiVoid_NSRange_bool_listenerTrampoline(
+ ffi.Pointer<objc.ObjCBlockImpl> block,
+ ffi.Pointer<ffi.Void> arg0,
+ NSRange arg1,
+ ffi.Pointer<ffi.Bool> arg2) {
+ (objc.getBlockClosure(block) as void Function(
+ ffi.Pointer<ffi.Void>, NSRange, ffi.Pointer<ffi.Bool>))(arg0, arg1, arg2);
+ objc.objectRelease(block.cast());
+}
+
+ffi.NativeCallable<
+ ffi.Void Function(ffi.Pointer<objc.ObjCBlockImpl>,
+ ffi.Pointer<ffi.Void>, NSRange, ffi.Pointer<ffi.Bool>)>
+ _ObjCBlock_ffiVoid_ffiVoid_NSRange_bool_listenerCallable = ffi
+ .NativeCallable<
+ ffi.Void Function(
+ ffi.Pointer<objc.ObjCBlockImpl>,
+ ffi.Pointer<ffi.Void>,
+ NSRange,
+ ffi.Pointer<ffi.Bool>)>.listener(
+ _ObjCBlock_ffiVoid_ffiVoid_NSRange_bool_listenerTrampoline)
+ ..keepIsolateAlive = false;
+void _ObjCBlock_ffiVoid_ffiVoid_NSRange_bool_blockingTrampoline(
+ ffi.Pointer<objc.ObjCBlockImpl> block,
+ ffi.Pointer<ffi.Void> waiter,
+ ffi.Pointer<ffi.Void> arg0,
+ NSRange arg1,
+ ffi.Pointer<ffi.Bool> arg2) {
+ try {
+ (objc.getBlockClosure(block) as void Function(ffi.Pointer<ffi.Void>,
+ NSRange, ffi.Pointer<ffi.Bool>))(arg0, arg1, arg2);
+ } catch (e) {
+ } finally {
+ objc.signalWaiter(waiter);
+ objc.objectRelease(block.cast());
+ }
+}
+
+ffi.NativeCallable<
+ ffi.Void Function(
+ ffi.Pointer<objc.ObjCBlockImpl>,
+ ffi.Pointer<ffi.Void>,
+ ffi.Pointer<ffi.Void>,
+ NSRange,
+ ffi.Pointer<ffi.Bool>)>
+ _ObjCBlock_ffiVoid_ffiVoid_NSRange_bool_blockingCallable = ffi
+ .NativeCallable<
+ ffi.Void Function(
+ ffi.Pointer<objc.ObjCBlockImpl>,
+ ffi.Pointer<ffi.Void>,
+ ffi.Pointer<ffi.Void>,
+ NSRange,
+ ffi.Pointer<ffi.Bool>)>.isolateLocal(
+ _ObjCBlock_ffiVoid_ffiVoid_NSRange_bool_blockingTrampoline)
+ ..keepIsolateAlive = false;
+ffi.NativeCallable<
+ ffi.Void Function(
+ ffi.Pointer<objc.ObjCBlockImpl>,
+ ffi.Pointer<ffi.Void>,
+ ffi.Pointer<ffi.Void>,
+ NSRange,
+ ffi.Pointer<ffi.Bool>)>
+ _ObjCBlock_ffiVoid_ffiVoid_NSRange_bool_blockingListenerCallable = ffi
+ .NativeCallable<
+ ffi.Void Function(
+ ffi.Pointer<objc.ObjCBlockImpl>,
+ ffi.Pointer<ffi.Void>,
+ ffi.Pointer<ffi.Void>,
+ NSRange,
+ ffi.Pointer<ffi.Bool>)>.listener(
+ _ObjCBlock_ffiVoid_ffiVoid_NSRange_bool_blockingTrampoline)
+ ..keepIsolateAlive = false;
+
+/// Construction methods for `objc.ObjCBlock<ffi.Void Function(ffi.Pointer<ffi.Void>, NSRange, ffi.Pointer<ffi.Bool>)>`.
+abstract final class ObjCBlock_ffiVoid_ffiVoid_NSRange_bool {
+ /// Returns a block that wraps the given raw block pointer.
+ static objc.ObjCBlock<
+ ffi.Void Function(
+ ffi.Pointer<ffi.Void>, NSRange, ffi.Pointer<ffi.Bool>)>
+ castFromPointer(ffi.Pointer<objc.ObjCBlockImpl> pointer,
+ {bool retain = false, bool release = false}) =>
+ objc.ObjCBlock<
+ ffi.Void Function(
+ ffi.Pointer<ffi.Void>, NSRange, ffi.Pointer<ffi.Bool>)>(
+ pointer,
+ retain: retain,
+ release: release);
+
+ /// Creates a block from a C function pointer.
+ ///
+ /// This block must be invoked by native code running on the same thread as
+ /// the isolate that registered it. Invoking the block on the wrong thread
+ /// will result in a crash.
+ static objc.ObjCBlock<
+ ffi.Void Function(ffi.Pointer<ffi.Void>, NSRange, ffi.Pointer<ffi.Bool>)>
+ fromFunctionPointer(
+ ffi.Pointer<ffi.NativeFunction<ffi.Void Function(ffi.Pointer<ffi.Void> arg0, NSRange arg1, ffi.Pointer<ffi.Bool> arg2)>>
+ ptr) =>
+ objc.ObjCBlock<ffi.Void Function(ffi.Pointer<ffi.Void>, NSRange, ffi.Pointer<ffi.Bool>)>(
+ objc.newPointerBlock(
+ _ObjCBlock_ffiVoid_ffiVoid_NSRange_bool_fnPtrCallable, ptr.cast()),
+ retain: false,
+ release: true);
+
+ /// Creates a block from a Dart function.
+ ///
+ /// This block must be invoked by native code running on the same thread as
+ /// the isolate that registered it. Invoking the block on the wrong thread
+ /// will result in a crash.
+ ///
+ /// If `keepIsolateAlive` is true, this block will keep this isolate alive
+ /// until it is garbage collected by both Dart and ObjC.
+ static objc
+ .ObjCBlock<ffi.Void Function(ffi.Pointer<ffi.Void>, NSRange, ffi.Pointer<ffi.Bool>)>
+ fromFunction(void Function(ffi.Pointer<ffi.Void>, NSRange, ffi.Pointer<ffi.Bool>) fn,
+ {bool keepIsolateAlive = true}) =>
+ objc.ObjCBlock<ffi.Void Function(ffi.Pointer<ffi.Void>, NSRange, ffi.Pointer<ffi.Bool>)>(
+ objc.newClosureBlock(
+ _ObjCBlock_ffiVoid_ffiVoid_NSRange_bool_closureCallable,
+ (ffi.Pointer<ffi.Void> arg0, NSRange arg1,
+ ffi.Pointer<ffi.Bool> arg2) =>
+ fn(arg0, arg1, arg2),
+ keepIsolateAlive),
+ retain: false,
+ release: true);
+
+ /// Creates a listener block from a Dart function.
+ ///
+ /// This is based on FFI's NativeCallable.listener, and has the same
+ /// capabilities and limitations. This block can be invoked from any thread,
+ /// but only supports void functions, and is not run synchronously. See
+ /// NativeCallable.listener for more details.
+ ///
+ /// If `keepIsolateAlive` is true, this block will keep this isolate alive
+ /// until it is garbage collected by both Dart and ObjC.
+ static objc.ObjCBlock<
+ ffi.Void Function(
+ ffi.Pointer<ffi.Void>, NSRange, ffi.Pointer<ffi.Bool>)> listener(
+ void Function(ffi.Pointer<ffi.Void>, NSRange, ffi.Pointer<ffi.Bool>) fn,
+ {bool keepIsolateAlive = true}) {
+ final raw = objc.newClosureBlock(
+ _ObjCBlock_ffiVoid_ffiVoid_NSRange_bool_listenerCallable.nativeFunction
+ .cast(),
+ (ffi.Pointer<ffi.Void> arg0, NSRange arg1,
+ ffi.Pointer<ffi.Bool> arg2) =>
+ fn(arg0, arg1, arg2),
+ keepIsolateAlive);
+ final wrapper = _ObjectiveCBindings_wrapListenerBlock_1q8ia8l(raw);
+ objc.objectRelease(raw.cast());
+ return objc.ObjCBlock<
+ ffi.Void Function(ffi.Pointer<ffi.Void>, NSRange,
+ ffi.Pointer<ffi.Bool>)>(wrapper, retain: false, release: true);
+ }
+
+ /// Creates a blocking block from a Dart function.
+ ///
+ /// This callback can be invoked from any native thread, and will block the
+ /// caller until the callback is handled by the Dart isolate that created
+ /// the block. Async functions are not supported.
+ ///
+ /// If `keepIsolateAlive` is true, this block will keep this isolate alive
+ /// until it is garbage collected by both Dart and ObjC. If the owner isolate
+ /// has shut down, and the block is invoked by native code, it may block
+ /// indefinitely, or have other undefined behavior.
+ static objc.ObjCBlock<
+ ffi.Void Function(
+ ffi.Pointer<ffi.Void>, NSRange, ffi.Pointer<ffi.Bool>)> blocking(
+ void Function(ffi.Pointer<ffi.Void>, NSRange, ffi.Pointer<ffi.Bool>) fn,
+ {bool keepIsolateAlive = true}) {
+ final raw = objc.newClosureBlock(
+ _ObjCBlock_ffiVoid_ffiVoid_NSRange_bool_blockingCallable.nativeFunction
+ .cast(),
+ (ffi.Pointer<ffi.Void> arg0, NSRange arg1,
+ ffi.Pointer<ffi.Bool> arg2) =>
+ fn(arg0, arg1, arg2),
+ keepIsolateAlive);
+ final rawListener = objc.newClosureBlock(
+ _ObjCBlock_ffiVoid_ffiVoid_NSRange_bool_blockingListenerCallable
+ .nativeFunction
+ .cast(),
+ (ffi.Pointer<ffi.Void> arg0, NSRange arg1,
+ ffi.Pointer<ffi.Bool> arg2) =>
+ fn(arg0, arg1, arg2),
+ keepIsolateAlive);
+ final wrapper = _ObjectiveCBindings_wrapBlockingBlock_1q8ia8l(
+ raw, rawListener, objc.objCContext);
+ objc.objectRelease(raw.cast());
+ objc.objectRelease(rawListener.cast());
+ return objc.ObjCBlock<
+ ffi.Void Function(ffi.Pointer<ffi.Void>, NSRange,
+ ffi.Pointer<ffi.Bool>)>(wrapper, retain: false, release: true);
+ }
+}
+
+/// Call operator for `objc.ObjCBlock<ffi.Void Function(ffi.Pointer<ffi.Void>, NSRange, ffi.Pointer<ffi.Bool>)>`.
+extension ObjCBlock_ffiVoid_ffiVoid_NSRange_bool_CallExtension
+ on objc.ObjCBlock<
+ ffi.Void Function(
+ ffi.Pointer<ffi.Void>, NSRange, ffi.Pointer<ffi.Bool>)> {
+ void call(ffi.Pointer<ffi.Void> arg0, NSRange arg1,
+ ffi.Pointer<ffi.Bool> arg2) =>
+ ref.pointer.ref.invoke
+ .cast<
+ ffi.NativeFunction<
+ ffi.Void Function(
+ ffi.Pointer<objc.ObjCBlockImpl> block,
+ ffi.Pointer<ffi.Void> arg0,
+ NSRange arg1,
+ ffi.Pointer<ffi.Bool> arg2)>>()
+ .asFunction<
+ void Function(
+ ffi.Pointer<objc.ObjCBlockImpl>,
+ ffi.Pointer<ffi.Void>,
+ NSRange,
+ ffi.Pointer<ffi.Bool>)>()(ref.pointer, arg0, arg1, arg2);
+}
+
void _ObjCBlock_ffiVoid_ffiVoid_NSStream_NSStreamEvent_fnPtrTrampoline(
ffi.Pointer<objc.ObjCBlockImpl> block,
ffi.Pointer<ffi.Void> arg0,
@@ -15839,6 +21930,738 @@
int)>()(ref.pointer, arg0, arg1.ref.pointer, arg2.value);
}
+void _ObjCBlock_ffiVoid_ffiVoid_NSUInteger_fnPtrTrampoline(
+ ffi.Pointer<objc.ObjCBlockImpl> block,
+ ffi.Pointer<ffi.Void> arg0,
+ int arg1) =>
+ block.ref.target
+ .cast<
+ ffi.NativeFunction<
+ ffi.Void Function(
+ ffi.Pointer<ffi.Void> arg0, ffi.UnsignedLong arg1)>>()
+ .asFunction<void Function(ffi.Pointer<ffi.Void>, int)>()(arg0, arg1);
+ffi.Pointer<ffi.Void> _ObjCBlock_ffiVoid_ffiVoid_NSUInteger_fnPtrCallable =
+ ffi.Pointer.fromFunction<
+ ffi.Void Function(ffi.Pointer<objc.ObjCBlockImpl>,
+ ffi.Pointer<ffi.Void>, ffi.UnsignedLong)>(
+ _ObjCBlock_ffiVoid_ffiVoid_NSUInteger_fnPtrTrampoline)
+ .cast();
+void _ObjCBlock_ffiVoid_ffiVoid_NSUInteger_closureTrampoline(
+ ffi.Pointer<objc.ObjCBlockImpl> block,
+ ffi.Pointer<ffi.Void> arg0,
+ int arg1) =>
+ (objc.getBlockClosure(block) as void Function(ffi.Pointer<ffi.Void>, int))(
+ arg0, arg1);
+ffi.Pointer<ffi.Void> _ObjCBlock_ffiVoid_ffiVoid_NSUInteger_closureCallable =
+ ffi.Pointer.fromFunction<
+ ffi.Void Function(ffi.Pointer<objc.ObjCBlockImpl>,
+ ffi.Pointer<ffi.Void>, ffi.UnsignedLong)>(
+ _ObjCBlock_ffiVoid_ffiVoid_NSUInteger_closureTrampoline)
+ .cast();
+void _ObjCBlock_ffiVoid_ffiVoid_NSUInteger_listenerTrampoline(
+ ffi.Pointer<objc.ObjCBlockImpl> block,
+ ffi.Pointer<ffi.Void> arg0,
+ int arg1) {
+ (objc.getBlockClosure(block) as void Function(ffi.Pointer<ffi.Void>, int))(
+ arg0, arg1);
+ objc.objectRelease(block.cast());
+}
+
+ffi.NativeCallable<
+ ffi.Void Function(ffi.Pointer<objc.ObjCBlockImpl>,
+ ffi.Pointer<ffi.Void>, ffi.UnsignedLong)>
+ _ObjCBlock_ffiVoid_ffiVoid_NSUInteger_listenerCallable = ffi.NativeCallable<
+ ffi.Void Function(ffi.Pointer<objc.ObjCBlockImpl>,
+ ffi.Pointer<ffi.Void>, ffi.UnsignedLong)>.listener(
+ _ObjCBlock_ffiVoid_ffiVoid_NSUInteger_listenerTrampoline)
+ ..keepIsolateAlive = false;
+void _ObjCBlock_ffiVoid_ffiVoid_NSUInteger_blockingTrampoline(
+ ffi.Pointer<objc.ObjCBlockImpl> block,
+ ffi.Pointer<ffi.Void> waiter,
+ ffi.Pointer<ffi.Void> arg0,
+ int arg1) {
+ try {
+ (objc.getBlockClosure(block) as void Function(ffi.Pointer<ffi.Void>, int))(
+ arg0, arg1);
+ } catch (e) {
+ } finally {
+ objc.signalWaiter(waiter);
+ objc.objectRelease(block.cast());
+ }
+}
+
+ffi.NativeCallable<
+ ffi.Void Function(ffi.Pointer<objc.ObjCBlockImpl>,
+ ffi.Pointer<ffi.Void>, ffi.Pointer<ffi.Void>, ffi.UnsignedLong)>
+ _ObjCBlock_ffiVoid_ffiVoid_NSUInteger_blockingCallable = ffi.NativeCallable<
+ ffi.Void Function(
+ ffi.Pointer<objc.ObjCBlockImpl>,
+ ffi.Pointer<ffi.Void>,
+ ffi.Pointer<ffi.Void>,
+ ffi.UnsignedLong)>.isolateLocal(
+ _ObjCBlock_ffiVoid_ffiVoid_NSUInteger_blockingTrampoline)
+ ..keepIsolateAlive = false;
+ffi.NativeCallable<
+ ffi.Void Function(ffi.Pointer<objc.ObjCBlockImpl>,
+ ffi.Pointer<ffi.Void>, ffi.Pointer<ffi.Void>, ffi.UnsignedLong)>
+ _ObjCBlock_ffiVoid_ffiVoid_NSUInteger_blockingListenerCallable = ffi
+ .NativeCallable<
+ ffi.Void Function(
+ ffi.Pointer<objc.ObjCBlockImpl>,
+ ffi.Pointer<ffi.Void>,
+ ffi.Pointer<ffi.Void>,
+ ffi.UnsignedLong)>.listener(
+ _ObjCBlock_ffiVoid_ffiVoid_NSUInteger_blockingTrampoline)
+ ..keepIsolateAlive = false;
+
+/// Construction methods for `objc.ObjCBlock<ffi.Void Function(ffi.Pointer<ffi.Void>, ffi.UnsignedLong)>`.
+abstract final class ObjCBlock_ffiVoid_ffiVoid_NSUInteger {
+ /// Returns a block that wraps the given raw block pointer.
+ static objc
+ .ObjCBlock<ffi.Void Function(ffi.Pointer<ffi.Void>, ffi.UnsignedLong)>
+ castFromPointer(ffi.Pointer<objc.ObjCBlockImpl> pointer,
+ {bool retain = false, bool release = false}) =>
+ objc.ObjCBlock<
+ ffi.Void Function(ffi.Pointer<ffi.Void>,
+ ffi.UnsignedLong)>(pointer, retain: retain, release: release);
+
+ /// Creates a block from a C function pointer.
+ ///
+ /// This block must be invoked by native code running on the same thread as
+ /// the isolate that registered it. Invoking the block on the wrong thread
+ /// will result in a crash.
+ static objc.ObjCBlock<
+ ffi.Void Function(ffi.Pointer<ffi.Void>, ffi.UnsignedLong)> fromFunctionPointer(
+ ffi.Pointer<ffi.NativeFunction<ffi.Void Function(ffi.Pointer<ffi.Void> arg0, ffi.UnsignedLong arg1)>>
+ ptr) =>
+ objc.ObjCBlock<ffi.Void Function(ffi.Pointer<ffi.Void>, ffi.UnsignedLong)>(
+ objc.newPointerBlock(
+ _ObjCBlock_ffiVoid_ffiVoid_NSUInteger_fnPtrCallable, ptr.cast()),
+ retain: false,
+ release: true);
+
+ /// Creates a block from a Dart function.
+ ///
+ /// This block must be invoked by native code running on the same thread as
+ /// the isolate that registered it. Invoking the block on the wrong thread
+ /// will result in a crash.
+ ///
+ /// If `keepIsolateAlive` is true, this block will keep this isolate alive
+ /// until it is garbage collected by both Dart and ObjC.
+ static objc
+ .ObjCBlock<ffi.Void Function(ffi.Pointer<ffi.Void>, ffi.UnsignedLong)>
+ fromFunction(void Function(ffi.Pointer<ffi.Void>, int) fn,
+ {bool keepIsolateAlive = true}) =>
+ objc.ObjCBlock<
+ ffi.Void Function(ffi.Pointer<ffi.Void>, ffi.UnsignedLong)>(
+ objc.newClosureBlock(
+ _ObjCBlock_ffiVoid_ffiVoid_NSUInteger_closureCallable,
+ (ffi.Pointer<ffi.Void> arg0, int arg1) => fn(arg0, arg1),
+ keepIsolateAlive),
+ retain: false,
+ release: true);
+
+ /// Creates a listener block from a Dart function.
+ ///
+ /// This is based on FFI's NativeCallable.listener, and has the same
+ /// capabilities and limitations. This block can be invoked from any thread,
+ /// but only supports void functions, and is not run synchronously. See
+ /// NativeCallable.listener for more details.
+ ///
+ /// If `keepIsolateAlive` is true, this block will keep this isolate alive
+ /// until it is garbage collected by both Dart and ObjC.
+ static objc
+ .ObjCBlock<ffi.Void Function(ffi.Pointer<ffi.Void>, ffi.UnsignedLong)>
+ listener(void Function(ffi.Pointer<ffi.Void>, int) fn,
+ {bool keepIsolateAlive = true}) {
+ final raw = objc.newClosureBlock(
+ _ObjCBlock_ffiVoid_ffiVoid_NSUInteger_listenerCallable.nativeFunction
+ .cast(),
+ (ffi.Pointer<ffi.Void> arg0, int arg1) => fn(arg0, arg1),
+ keepIsolateAlive);
+ final wrapper = _ObjectiveCBindings_wrapListenerBlock_zuf90e(raw);
+ objc.objectRelease(raw.cast());
+ return objc.ObjCBlock<
+ ffi.Void Function(ffi.Pointer<ffi.Void>, ffi.UnsignedLong)>(wrapper,
+ retain: false, release: true);
+ }
+
+ /// Creates a blocking block from a Dart function.
+ ///
+ /// This callback can be invoked from any native thread, and will block the
+ /// caller until the callback is handled by the Dart isolate that created
+ /// the block. Async functions are not supported.
+ ///
+ /// If `keepIsolateAlive` is true, this block will keep this isolate alive
+ /// until it is garbage collected by both Dart and ObjC. If the owner isolate
+ /// has shut down, and the block is invoked by native code, it may block
+ /// indefinitely, or have other undefined behavior.
+ static objc
+ .ObjCBlock<ffi.Void Function(ffi.Pointer<ffi.Void>, ffi.UnsignedLong)>
+ blocking(void Function(ffi.Pointer<ffi.Void>, int) fn,
+ {bool keepIsolateAlive = true}) {
+ final raw = objc.newClosureBlock(
+ _ObjCBlock_ffiVoid_ffiVoid_NSUInteger_blockingCallable.nativeFunction
+ .cast(),
+ (ffi.Pointer<ffi.Void> arg0, int arg1) => fn(arg0, arg1),
+ keepIsolateAlive);
+ final rawListener = objc.newClosureBlock(
+ _ObjCBlock_ffiVoid_ffiVoid_NSUInteger_blockingListenerCallable
+ .nativeFunction
+ .cast(),
+ (ffi.Pointer<ffi.Void> arg0, int arg1) => fn(arg0, arg1),
+ keepIsolateAlive);
+ final wrapper = _ObjectiveCBindings_wrapBlockingBlock_zuf90e(
+ raw, rawListener, objc.objCContext);
+ objc.objectRelease(raw.cast());
+ objc.objectRelease(rawListener.cast());
+ return objc.ObjCBlock<
+ ffi.Void Function(ffi.Pointer<ffi.Void>, ffi.UnsignedLong)>(wrapper,
+ retain: false, release: true);
+ }
+}
+
+/// Call operator for `objc.ObjCBlock<ffi.Void Function(ffi.Pointer<ffi.Void>, ffi.UnsignedLong)>`.
+extension ObjCBlock_ffiVoid_ffiVoid_NSUInteger_CallExtension on objc
+ .ObjCBlock<ffi.Void Function(ffi.Pointer<ffi.Void>, ffi.UnsignedLong)> {
+ void call(ffi.Pointer<ffi.Void> arg0, int arg1) => ref.pointer.ref.invoke
+ .cast<
+ ffi.NativeFunction<
+ ffi.Void Function(ffi.Pointer<objc.ObjCBlockImpl> block,
+ ffi.Pointer<ffi.Void> arg0, ffi.UnsignedLong arg1)>>()
+ .asFunction<
+ void Function(ffi.Pointer<objc.ObjCBlockImpl>, ffi.Pointer<ffi.Void>,
+ int)>()(ref.pointer, arg0, arg1);
+}
+
+void _ObjCBlock_ffiVoid_idNSItemProviderReading_NSError_fnPtrTrampoline(
+ ffi.Pointer<objc.ObjCBlockImpl> block,
+ ffi.Pointer<objc.ObjCObject> arg0,
+ ffi.Pointer<objc.ObjCObject> arg1) =>
+ block.ref.target
+ .cast<
+ ffi.NativeFunction<
+ ffi.Void Function(ffi.Pointer<objc.ObjCObject> arg0,
+ ffi.Pointer<objc.ObjCObject> arg1)>>()
+ .asFunction<
+ void Function(ffi.Pointer<objc.ObjCObject>,
+ ffi.Pointer<objc.ObjCObject>)>()(arg0, arg1);
+ffi.Pointer<ffi.Void>
+ _ObjCBlock_ffiVoid_idNSItemProviderReading_NSError_fnPtrCallable =
+ ffi.Pointer.fromFunction<
+ ffi.Void Function(
+ ffi.Pointer<objc.ObjCBlockImpl>,
+ ffi.Pointer<objc.ObjCObject>,
+ ffi.Pointer<objc.ObjCObject>)>(
+ _ObjCBlock_ffiVoid_idNSItemProviderReading_NSError_fnPtrTrampoline)
+ .cast();
+void _ObjCBlock_ffiVoid_idNSItemProviderReading_NSError_closureTrampoline(
+ ffi.Pointer<objc.ObjCBlockImpl> block,
+ ffi.Pointer<objc.ObjCObject> arg0,
+ ffi.Pointer<objc.ObjCObject> arg1) =>
+ (objc.getBlockClosure(block) as void Function(ffi.Pointer<objc.ObjCObject>,
+ ffi.Pointer<objc.ObjCObject>))(arg0, arg1);
+ffi.Pointer<ffi.Void>
+ _ObjCBlock_ffiVoid_idNSItemProviderReading_NSError_closureCallable =
+ ffi.Pointer.fromFunction<
+ ffi.Void Function(
+ ffi.Pointer<objc.ObjCBlockImpl>,
+ ffi.Pointer<objc.ObjCObject>,
+ ffi.Pointer<objc.ObjCObject>)>(
+ _ObjCBlock_ffiVoid_idNSItemProviderReading_NSError_closureTrampoline)
+ .cast();
+void _ObjCBlock_ffiVoid_idNSItemProviderReading_NSError_listenerTrampoline(
+ ffi.Pointer<objc.ObjCBlockImpl> block,
+ ffi.Pointer<objc.ObjCObject> arg0,
+ ffi.Pointer<objc.ObjCObject> arg1) {
+ (objc.getBlockClosure(block) as void Function(
+ ffi.Pointer<objc.ObjCObject>, ffi.Pointer<objc.ObjCObject>))(arg0, arg1);
+ objc.objectRelease(block.cast());
+}
+
+ffi.NativeCallable<
+ ffi.Void Function(ffi.Pointer<objc.ObjCBlockImpl>,
+ ffi.Pointer<objc.ObjCObject>, ffi.Pointer<objc.ObjCObject>)>
+ _ObjCBlock_ffiVoid_idNSItemProviderReading_NSError_listenerCallable = ffi
+ .NativeCallable<
+ ffi.Void Function(
+ ffi.Pointer<objc.ObjCBlockImpl>,
+ ffi.Pointer<objc.ObjCObject>,
+ ffi.Pointer<objc.ObjCObject>)>.listener(
+ _ObjCBlock_ffiVoid_idNSItemProviderReading_NSError_listenerTrampoline)
+ ..keepIsolateAlive = false;
+void _ObjCBlock_ffiVoid_idNSItemProviderReading_NSError_blockingTrampoline(
+ ffi.Pointer<objc.ObjCBlockImpl> block,
+ ffi.Pointer<ffi.Void> waiter,
+ ffi.Pointer<objc.ObjCObject> arg0,
+ ffi.Pointer<objc.ObjCObject> arg1) {
+ try {
+ (objc.getBlockClosure(block) as void Function(ffi.Pointer<objc.ObjCObject>,
+ ffi.Pointer<objc.ObjCObject>))(arg0, arg1);
+ } catch (e) {
+ } finally {
+ objc.signalWaiter(waiter);
+ objc.objectRelease(block.cast());
+ }
+}
+
+ffi.NativeCallable<
+ ffi.Void Function(
+ ffi.Pointer<objc.ObjCBlockImpl>,
+ ffi.Pointer<ffi.Void>,
+ ffi.Pointer<objc.ObjCObject>,
+ ffi.Pointer<objc.ObjCObject>)>
+ _ObjCBlock_ffiVoid_idNSItemProviderReading_NSError_blockingCallable = ffi
+ .NativeCallable<
+ ffi.Void Function(
+ ffi.Pointer<objc.ObjCBlockImpl>,
+ ffi.Pointer<ffi.Void>,
+ ffi.Pointer<objc.ObjCObject>,
+ ffi.Pointer<objc.ObjCObject>)>.isolateLocal(
+ _ObjCBlock_ffiVoid_idNSItemProviderReading_NSError_blockingTrampoline)
+ ..keepIsolateAlive = false;
+ffi.NativeCallable<
+ ffi.Void Function(
+ ffi.Pointer<objc.ObjCBlockImpl>,
+ ffi.Pointer<ffi.Void>,
+ ffi.Pointer<objc.ObjCObject>,
+ ffi.Pointer<objc.ObjCObject>)>
+ _ObjCBlock_ffiVoid_idNSItemProviderReading_NSError_blockingListenerCallable =
+ ffi.NativeCallable<
+ ffi.Void Function(
+ ffi.Pointer<objc.ObjCBlockImpl>,
+ ffi.Pointer<ffi.Void>,
+ ffi.Pointer<objc.ObjCObject>,
+ ffi.Pointer<objc.ObjCObject>)>.listener(
+ _ObjCBlock_ffiVoid_idNSItemProviderReading_NSError_blockingTrampoline)
+ ..keepIsolateAlive = false;
+
+/// Construction methods for `objc.ObjCBlock<ffi.Void Function(ffi.Pointer<objc.ObjCObject>?, NSError?)>`.
+abstract final class ObjCBlock_ffiVoid_idNSItemProviderReading_NSError {
+ /// Returns a block that wraps the given raw block pointer.
+ static objc
+ .ObjCBlock<ffi.Void Function(ffi.Pointer<objc.ObjCObject>?, NSError?)>
+ castFromPointer(ffi.Pointer<objc.ObjCBlockImpl> pointer,
+ {bool retain = false, bool release = false}) =>
+ objc.ObjCBlock<
+ ffi.Void Function(ffi.Pointer<objc.ObjCObject>?,
+ NSError?)>(pointer, retain: retain, release: release);
+
+ /// Creates a block from a C function pointer.
+ ///
+ /// This block must be invoked by native code running on the same thread as
+ /// the isolate that registered it. Invoking the block on the wrong thread
+ /// will result in a crash.
+ static objc.ObjCBlock<ffi.Void Function(ffi.Pointer<objc.ObjCObject>?, NSError?)> fromFunctionPointer(
+ ffi.Pointer<
+ ffi.NativeFunction<
+ ffi.Void Function(ffi.Pointer<objc.ObjCObject> arg0,
+ ffi.Pointer<objc.ObjCObject> arg1)>>
+ ptr) =>
+ objc.ObjCBlock<ffi.Void Function(ffi.Pointer<objc.ObjCObject>?, NSError?)>(
+ objc.newPointerBlock(_ObjCBlock_ffiVoid_idNSItemProviderReading_NSError_fnPtrCallable, ptr.cast()),
+ retain: false,
+ release: true);
+
+ /// Creates a block from a Dart function.
+ ///
+ /// This block must be invoked by native code running on the same thread as
+ /// the isolate that registered it. Invoking the block on the wrong thread
+ /// will result in a crash.
+ ///
+ /// If `keepIsolateAlive` is true, this block will keep this isolate alive
+ /// until it is garbage collected by both Dart and ObjC.
+ static objc.ObjCBlock<ffi.Void Function(ffi.Pointer<objc.ObjCObject>?, NSError?)> fromFunction(
+ void Function(NSItemProviderReading?, NSError?) fn,
+ {bool keepIsolateAlive = true}) =>
+ objc.ObjCBlock<ffi.Void Function(ffi.Pointer<objc.ObjCObject>?, NSError?)>(
+ objc.newClosureBlock(
+ _ObjCBlock_ffiVoid_idNSItemProviderReading_NSError_closureCallable,
+ (ffi.Pointer<objc.ObjCObject> arg0, ffi.Pointer<objc.ObjCObject> arg1) => fn(
+ arg0.address == 0
+ ? null
+ : NSItemProviderReading.castFromPointer(arg0, retain: true, release: true),
+ arg1.address == 0 ? null : NSError.castFromPointer(arg1, retain: true, release: true)),
+ keepIsolateAlive),
+ retain: false,
+ release: true);
+
+ /// Creates a listener block from a Dart function.
+ ///
+ /// This is based on FFI's NativeCallable.listener, and has the same
+ /// capabilities and limitations. This block can be invoked from any thread,
+ /// but only supports void functions, and is not run synchronously. See
+ /// NativeCallable.listener for more details.
+ ///
+ /// If `keepIsolateAlive` is true, this block will keep this isolate alive
+ /// until it is garbage collected by both Dart and ObjC.
+ static objc
+ .ObjCBlock<ffi.Void Function(ffi.Pointer<objc.ObjCObject>?, NSError?)>
+ listener(void Function(NSItemProviderReading?, NSError?) fn,
+ {bool keepIsolateAlive = true}) {
+ final raw = objc.newClosureBlock(
+ _ObjCBlock_ffiVoid_idNSItemProviderReading_NSError_listenerCallable
+ .nativeFunction
+ .cast(),
+ (ffi.Pointer<objc.ObjCObject> arg0,
+ ffi.Pointer<objc.ObjCObject> arg1) =>
+ fn(
+ arg0.address == 0
+ ? null
+ : NSItemProviderReading.castFromPointer(arg0,
+ retain: false, release: true),
+ arg1.address == 0
+ ? null
+ : NSError.castFromPointer(arg1,
+ retain: false, release: true)),
+ keepIsolateAlive);
+ final wrapper = _ObjectiveCBindings_wrapListenerBlock_pfv6jd(raw);
+ objc.objectRelease(raw.cast());
+ return objc.ObjCBlock<
+ ffi.Void Function(ffi.Pointer<objc.ObjCObject>?, NSError?)>(wrapper,
+ retain: false, release: true);
+ }
+
+ /// Creates a blocking block from a Dart function.
+ ///
+ /// This callback can be invoked from any native thread, and will block the
+ /// caller until the callback is handled by the Dart isolate that created
+ /// the block. Async functions are not supported.
+ ///
+ /// If `keepIsolateAlive` is true, this block will keep this isolate alive
+ /// until it is garbage collected by both Dart and ObjC. If the owner isolate
+ /// has shut down, and the block is invoked by native code, it may block
+ /// indefinitely, or have other undefined behavior.
+ static objc
+ .ObjCBlock<ffi.Void Function(ffi.Pointer<objc.ObjCObject>?, NSError?)>
+ blocking(void Function(NSItemProviderReading?, NSError?) fn,
+ {bool keepIsolateAlive = true}) {
+ final raw = objc.newClosureBlock(
+ _ObjCBlock_ffiVoid_idNSItemProviderReading_NSError_blockingCallable
+ .nativeFunction
+ .cast(),
+ (ffi.Pointer<objc.ObjCObject> arg0,
+ ffi.Pointer<objc.ObjCObject> arg1) =>
+ fn(
+ arg0.address == 0
+ ? null
+ : NSItemProviderReading.castFromPointer(arg0,
+ retain: false, release: true),
+ arg1.address == 0
+ ? null
+ : NSError.castFromPointer(arg1,
+ retain: false, release: true)),
+ keepIsolateAlive);
+ final rawListener = objc.newClosureBlock(
+ _ObjCBlock_ffiVoid_idNSItemProviderReading_NSError_blockingListenerCallable
+ .nativeFunction
+ .cast(),
+ (ffi.Pointer<objc.ObjCObject> arg0,
+ ffi.Pointer<objc.ObjCObject> arg1) =>
+ fn(
+ arg0.address == 0
+ ? null
+ : NSItemProviderReading.castFromPointer(arg0,
+ retain: false, release: true),
+ arg1.address == 0
+ ? null
+ : NSError.castFromPointer(arg1,
+ retain: false, release: true)),
+ keepIsolateAlive);
+ final wrapper = _ObjectiveCBindings_wrapBlockingBlock_pfv6jd(
+ raw, rawListener, objc.objCContext);
+ objc.objectRelease(raw.cast());
+ objc.objectRelease(rawListener.cast());
+ return objc.ObjCBlock<
+ ffi.Void Function(ffi.Pointer<objc.ObjCObject>?, NSError?)>(wrapper,
+ retain: false, release: true);
+ }
+}
+
+/// Call operator for `objc.ObjCBlock<ffi.Void Function(ffi.Pointer<objc.ObjCObject>?, NSError?)>`.
+extension ObjCBlock_ffiVoid_idNSItemProviderReading_NSError_CallExtension
+ on objc
+ .ObjCBlock<ffi.Void Function(ffi.Pointer<objc.ObjCObject>?, NSError?)> {
+ void call(NSItemProviderReading? arg0, NSError? arg1) =>
+ ref.pointer.ref.invoke
+ .cast<
+ ffi.NativeFunction<
+ ffi.Void Function(
+ ffi.Pointer<objc.ObjCBlockImpl> block,
+ ffi.Pointer<objc.ObjCObject> arg0,
+ ffi.Pointer<objc.ObjCObject> arg1)>>()
+ .asFunction<
+ void Function(
+ ffi.Pointer<objc.ObjCBlockImpl>,
+ ffi.Pointer<objc.ObjCObject>,
+ ffi.Pointer<objc.ObjCObject>)>()(ref.pointer,
+ arg0?.ref.pointer ?? ffi.nullptr, arg1?.ref.pointer ?? ffi.nullptr);
+}
+
+void _ObjCBlock_ffiVoid_idNSItemProviderWriting_NSError_fnPtrTrampoline(
+ ffi.Pointer<objc.ObjCBlockImpl> block,
+ ffi.Pointer<objc.ObjCObject> arg0,
+ ffi.Pointer<objc.ObjCObject> arg1) =>
+ block.ref.target
+ .cast<
+ ffi.NativeFunction<
+ ffi.Void Function(ffi.Pointer<objc.ObjCObject> arg0,
+ ffi.Pointer<objc.ObjCObject> arg1)>>()
+ .asFunction<
+ void Function(ffi.Pointer<objc.ObjCObject>,
+ ffi.Pointer<objc.ObjCObject>)>()(arg0, arg1);
+ffi.Pointer<ffi.Void>
+ _ObjCBlock_ffiVoid_idNSItemProviderWriting_NSError_fnPtrCallable =
+ ffi.Pointer.fromFunction<
+ ffi.Void Function(
+ ffi.Pointer<objc.ObjCBlockImpl>,
+ ffi.Pointer<objc.ObjCObject>,
+ ffi.Pointer<objc.ObjCObject>)>(
+ _ObjCBlock_ffiVoid_idNSItemProviderWriting_NSError_fnPtrTrampoline)
+ .cast();
+void _ObjCBlock_ffiVoid_idNSItemProviderWriting_NSError_closureTrampoline(
+ ffi.Pointer<objc.ObjCBlockImpl> block,
+ ffi.Pointer<objc.ObjCObject> arg0,
+ ffi.Pointer<objc.ObjCObject> arg1) =>
+ (objc.getBlockClosure(block) as void Function(ffi.Pointer<objc.ObjCObject>,
+ ffi.Pointer<objc.ObjCObject>))(arg0, arg1);
+ffi.Pointer<ffi.Void>
+ _ObjCBlock_ffiVoid_idNSItemProviderWriting_NSError_closureCallable =
+ ffi.Pointer.fromFunction<
+ ffi.Void Function(
+ ffi.Pointer<objc.ObjCBlockImpl>,
+ ffi.Pointer<objc.ObjCObject>,
+ ffi.Pointer<objc.ObjCObject>)>(
+ _ObjCBlock_ffiVoid_idNSItemProviderWriting_NSError_closureTrampoline)
+ .cast();
+void _ObjCBlock_ffiVoid_idNSItemProviderWriting_NSError_listenerTrampoline(
+ ffi.Pointer<objc.ObjCBlockImpl> block,
+ ffi.Pointer<objc.ObjCObject> arg0,
+ ffi.Pointer<objc.ObjCObject> arg1) {
+ (objc.getBlockClosure(block) as void Function(
+ ffi.Pointer<objc.ObjCObject>, ffi.Pointer<objc.ObjCObject>))(arg0, arg1);
+ objc.objectRelease(block.cast());
+}
+
+ffi.NativeCallable<
+ ffi.Void Function(ffi.Pointer<objc.ObjCBlockImpl>,
+ ffi.Pointer<objc.ObjCObject>, ffi.Pointer<objc.ObjCObject>)>
+ _ObjCBlock_ffiVoid_idNSItemProviderWriting_NSError_listenerCallable = ffi
+ .NativeCallable<
+ ffi.Void Function(
+ ffi.Pointer<objc.ObjCBlockImpl>,
+ ffi.Pointer<objc.ObjCObject>,
+ ffi.Pointer<objc.ObjCObject>)>.listener(
+ _ObjCBlock_ffiVoid_idNSItemProviderWriting_NSError_listenerTrampoline)
+ ..keepIsolateAlive = false;
+void _ObjCBlock_ffiVoid_idNSItemProviderWriting_NSError_blockingTrampoline(
+ ffi.Pointer<objc.ObjCBlockImpl> block,
+ ffi.Pointer<ffi.Void> waiter,
+ ffi.Pointer<objc.ObjCObject> arg0,
+ ffi.Pointer<objc.ObjCObject> arg1) {
+ try {
+ (objc.getBlockClosure(block) as void Function(ffi.Pointer<objc.ObjCObject>,
+ ffi.Pointer<objc.ObjCObject>))(arg0, arg1);
+ } catch (e) {
+ } finally {
+ objc.signalWaiter(waiter);
+ objc.objectRelease(block.cast());
+ }
+}
+
+ffi.NativeCallable<
+ ffi.Void Function(
+ ffi.Pointer<objc.ObjCBlockImpl>,
+ ffi.Pointer<ffi.Void>,
+ ffi.Pointer<objc.ObjCObject>,
+ ffi.Pointer<objc.ObjCObject>)>
+ _ObjCBlock_ffiVoid_idNSItemProviderWriting_NSError_blockingCallable = ffi
+ .NativeCallable<
+ ffi.Void Function(
+ ffi.Pointer<objc.ObjCBlockImpl>,
+ ffi.Pointer<ffi.Void>,
+ ffi.Pointer<objc.ObjCObject>,
+ ffi.Pointer<objc.ObjCObject>)>.isolateLocal(
+ _ObjCBlock_ffiVoid_idNSItemProviderWriting_NSError_blockingTrampoline)
+ ..keepIsolateAlive = false;
+ffi.NativeCallable<
+ ffi.Void Function(
+ ffi.Pointer<objc.ObjCBlockImpl>,
+ ffi.Pointer<ffi.Void>,
+ ffi.Pointer<objc.ObjCObject>,
+ ffi.Pointer<objc.ObjCObject>)>
+ _ObjCBlock_ffiVoid_idNSItemProviderWriting_NSError_blockingListenerCallable =
+ ffi.NativeCallable<
+ ffi.Void Function(
+ ffi.Pointer<objc.ObjCBlockImpl>,
+ ffi.Pointer<ffi.Void>,
+ ffi.Pointer<objc.ObjCObject>,
+ ffi.Pointer<objc.ObjCObject>)>.listener(
+ _ObjCBlock_ffiVoid_idNSItemProviderWriting_NSError_blockingTrampoline)
+ ..keepIsolateAlive = false;
+
+/// Construction methods for `objc.ObjCBlock<ffi.Void Function(ffi.Pointer<objc.ObjCObject>?, NSError?)>`.
+abstract final class ObjCBlock_ffiVoid_idNSItemProviderWriting_NSError {
+ /// Returns a block that wraps the given raw block pointer.
+ static objc
+ .ObjCBlock<ffi.Void Function(ffi.Pointer<objc.ObjCObject>?, NSError?)>
+ castFromPointer(ffi.Pointer<objc.ObjCBlockImpl> pointer,
+ {bool retain = false, bool release = false}) =>
+ objc.ObjCBlock<
+ ffi.Void Function(ffi.Pointer<objc.ObjCObject>?,
+ NSError?)>(pointer, retain: retain, release: release);
+
+ /// Creates a block from a C function pointer.
+ ///
+ /// This block must be invoked by native code running on the same thread as
+ /// the isolate that registered it. Invoking the block on the wrong thread
+ /// will result in a crash.
+ static objc.ObjCBlock<ffi.Void Function(ffi.Pointer<objc.ObjCObject>?, NSError?)> fromFunctionPointer(
+ ffi.Pointer<
+ ffi.NativeFunction<
+ ffi.Void Function(ffi.Pointer<objc.ObjCObject> arg0,
+ ffi.Pointer<objc.ObjCObject> arg1)>>
+ ptr) =>
+ objc.ObjCBlock<ffi.Void Function(ffi.Pointer<objc.ObjCObject>?, NSError?)>(
+ objc.newPointerBlock(_ObjCBlock_ffiVoid_idNSItemProviderWriting_NSError_fnPtrCallable, ptr.cast()),
+ retain: false,
+ release: true);
+
+ /// Creates a block from a Dart function.
+ ///
+ /// This block must be invoked by native code running on the same thread as
+ /// the isolate that registered it. Invoking the block on the wrong thread
+ /// will result in a crash.
+ ///
+ /// If `keepIsolateAlive` is true, this block will keep this isolate alive
+ /// until it is garbage collected by both Dart and ObjC.
+ static objc.ObjCBlock<ffi.Void Function(ffi.Pointer<objc.ObjCObject>?, NSError?)> fromFunction(
+ void Function(NSItemProviderWriting?, NSError?) fn,
+ {bool keepIsolateAlive = true}) =>
+ objc.ObjCBlock<ffi.Void Function(ffi.Pointer<objc.ObjCObject>?, NSError?)>(
+ objc.newClosureBlock(
+ _ObjCBlock_ffiVoid_idNSItemProviderWriting_NSError_closureCallable,
+ (ffi.Pointer<objc.ObjCObject> arg0, ffi.Pointer<objc.ObjCObject> arg1) => fn(
+ arg0.address == 0
+ ? null
+ : NSItemProviderWriting.castFromPointer(arg0, retain: true, release: true),
+ arg1.address == 0 ? null : NSError.castFromPointer(arg1, retain: true, release: true)),
+ keepIsolateAlive),
+ retain: false,
+ release: true);
+
+ /// Creates a listener block from a Dart function.
+ ///
+ /// This is based on FFI's NativeCallable.listener, and has the same
+ /// capabilities and limitations. This block can be invoked from any thread,
+ /// but only supports void functions, and is not run synchronously. See
+ /// NativeCallable.listener for more details.
+ ///
+ /// If `keepIsolateAlive` is true, this block will keep this isolate alive
+ /// until it is garbage collected by both Dart and ObjC.
+ static objc
+ .ObjCBlock<ffi.Void Function(ffi.Pointer<objc.ObjCObject>?, NSError?)>
+ listener(void Function(NSItemProviderWriting?, NSError?) fn,
+ {bool keepIsolateAlive = true}) {
+ final raw = objc.newClosureBlock(
+ _ObjCBlock_ffiVoid_idNSItemProviderWriting_NSError_listenerCallable
+ .nativeFunction
+ .cast(),
+ (ffi.Pointer<objc.ObjCObject> arg0,
+ ffi.Pointer<objc.ObjCObject> arg1) =>
+ fn(
+ arg0.address == 0
+ ? null
+ : NSItemProviderWriting.castFromPointer(arg0,
+ retain: false, release: true),
+ arg1.address == 0
+ ? null
+ : NSError.castFromPointer(arg1,
+ retain: false, release: true)),
+ keepIsolateAlive);
+ final wrapper = _ObjectiveCBindings_wrapListenerBlock_pfv6jd(raw);
+ objc.objectRelease(raw.cast());
+ return objc.ObjCBlock<
+ ffi.Void Function(ffi.Pointer<objc.ObjCObject>?, NSError?)>(wrapper,
+ retain: false, release: true);
+ }
+
+ /// Creates a blocking block from a Dart function.
+ ///
+ /// This callback can be invoked from any native thread, and will block the
+ /// caller until the callback is handled by the Dart isolate that created
+ /// the block. Async functions are not supported.
+ ///
+ /// If `keepIsolateAlive` is true, this block will keep this isolate alive
+ /// until it is garbage collected by both Dart and ObjC. If the owner isolate
+ /// has shut down, and the block is invoked by native code, it may block
+ /// indefinitely, or have other undefined behavior.
+ static objc
+ .ObjCBlock<ffi.Void Function(ffi.Pointer<objc.ObjCObject>?, NSError?)>
+ blocking(void Function(NSItemProviderWriting?, NSError?) fn,
+ {bool keepIsolateAlive = true}) {
+ final raw = objc.newClosureBlock(
+ _ObjCBlock_ffiVoid_idNSItemProviderWriting_NSError_blockingCallable
+ .nativeFunction
+ .cast(),
+ (ffi.Pointer<objc.ObjCObject> arg0,
+ ffi.Pointer<objc.ObjCObject> arg1) =>
+ fn(
+ arg0.address == 0
+ ? null
+ : NSItemProviderWriting.castFromPointer(arg0,
+ retain: false, release: true),
+ arg1.address == 0
+ ? null
+ : NSError.castFromPointer(arg1,
+ retain: false, release: true)),
+ keepIsolateAlive);
+ final rawListener = objc.newClosureBlock(
+ _ObjCBlock_ffiVoid_idNSItemProviderWriting_NSError_blockingListenerCallable
+ .nativeFunction
+ .cast(),
+ (ffi.Pointer<objc.ObjCObject> arg0,
+ ffi.Pointer<objc.ObjCObject> arg1) =>
+ fn(
+ arg0.address == 0
+ ? null
+ : NSItemProviderWriting.castFromPointer(arg0,
+ retain: false, release: true),
+ arg1.address == 0
+ ? null
+ : NSError.castFromPointer(arg1,
+ retain: false, release: true)),
+ keepIsolateAlive);
+ final wrapper = _ObjectiveCBindings_wrapBlockingBlock_pfv6jd(
+ raw, rawListener, objc.objCContext);
+ objc.objectRelease(raw.cast());
+ objc.objectRelease(rawListener.cast());
+ return objc.ObjCBlock<
+ ffi.Void Function(ffi.Pointer<objc.ObjCObject>?, NSError?)>(wrapper,
+ retain: false, release: true);
+ }
+}
+
+/// Call operator for `objc.ObjCBlock<ffi.Void Function(ffi.Pointer<objc.ObjCObject>?, NSError?)>`.
+extension ObjCBlock_ffiVoid_idNSItemProviderWriting_NSError_CallExtension
+ on objc
+ .ObjCBlock<ffi.Void Function(ffi.Pointer<objc.ObjCObject>?, NSError?)> {
+ void call(NSItemProviderWriting? arg0, NSError? arg1) =>
+ ref.pointer.ref.invoke
+ .cast<
+ ffi.NativeFunction<
+ ffi.Void Function(
+ ffi.Pointer<objc.ObjCBlockImpl> block,
+ ffi.Pointer<objc.ObjCObject> arg0,
+ ffi.Pointer<objc.ObjCObject> arg1)>>()
+ .asFunction<
+ void Function(
+ ffi.Pointer<objc.ObjCBlockImpl>,
+ ffi.Pointer<objc.ObjCObject>,
+ ffi.Pointer<objc.ObjCObject>)>()(ref.pointer,
+ arg0?.ref.pointer ?? ffi.nullptr, arg1?.ref.pointer ?? ffi.nullptr);
+}
+
void _ObjCBlock_ffiVoid_idNSSecureCoding_NSError_fnPtrTrampoline(
ffi.Pointer<objc.ObjCBlockImpl> block,
ffi.Pointer<objc.ObjCObject> arg0,
@@ -16092,6 +22915,222 @@
ref.pointer, arg0?.ref.pointer ?? ffi.nullptr, arg1.ref.pointer);
}
+void _ObjCBlock_ffiVoid_unichar_NSUInteger_fnPtrTrampoline(
+ ffi.Pointer<objc.ObjCBlockImpl> block,
+ ffi.Pointer<ffi.UnsignedShort> arg0,
+ int arg1) =>
+ block.ref.target
+ .cast<
+ ffi.NativeFunction<
+ ffi.Void Function(ffi.Pointer<ffi.UnsignedShort> arg0,
+ ffi.UnsignedLong arg1)>>()
+ .asFunction<void Function(ffi.Pointer<ffi.UnsignedShort>, int)>()(
+ arg0, arg1);
+ffi.Pointer<ffi.Void> _ObjCBlock_ffiVoid_unichar_NSUInteger_fnPtrCallable =
+ ffi.Pointer.fromFunction<
+ ffi.Void Function(ffi.Pointer<objc.ObjCBlockImpl>,
+ ffi.Pointer<ffi.UnsignedShort>, ffi.UnsignedLong)>(
+ _ObjCBlock_ffiVoid_unichar_NSUInteger_fnPtrTrampoline)
+ .cast();
+void _ObjCBlock_ffiVoid_unichar_NSUInteger_closureTrampoline(
+ ffi.Pointer<objc.ObjCBlockImpl> block,
+ ffi.Pointer<ffi.UnsignedShort> arg0,
+ int arg1) =>
+ (objc.getBlockClosure(block) as void Function(
+ ffi.Pointer<ffi.UnsignedShort>, int))(arg0, arg1);
+ffi.Pointer<ffi.Void> _ObjCBlock_ffiVoid_unichar_NSUInteger_closureCallable =
+ ffi.Pointer.fromFunction<
+ ffi.Void Function(ffi.Pointer<objc.ObjCBlockImpl>,
+ ffi.Pointer<ffi.UnsignedShort>, ffi.UnsignedLong)>(
+ _ObjCBlock_ffiVoid_unichar_NSUInteger_closureTrampoline)
+ .cast();
+void _ObjCBlock_ffiVoid_unichar_NSUInteger_listenerTrampoline(
+ ffi.Pointer<objc.ObjCBlockImpl> block,
+ ffi.Pointer<ffi.UnsignedShort> arg0,
+ int arg1) {
+ (objc.getBlockClosure(block) as void Function(
+ ffi.Pointer<ffi.UnsignedShort>, int))(arg0, arg1);
+ objc.objectRelease(block.cast());
+}
+
+ffi.NativeCallable<
+ ffi.Void Function(ffi.Pointer<objc.ObjCBlockImpl>,
+ ffi.Pointer<ffi.UnsignedShort>, ffi.UnsignedLong)>
+ _ObjCBlock_ffiVoid_unichar_NSUInteger_listenerCallable = ffi.NativeCallable<
+ ffi.Void Function(ffi.Pointer<objc.ObjCBlockImpl>,
+ ffi.Pointer<ffi.UnsignedShort>, ffi.UnsignedLong)>.listener(
+ _ObjCBlock_ffiVoid_unichar_NSUInteger_listenerTrampoline)
+ ..keepIsolateAlive = false;
+void _ObjCBlock_ffiVoid_unichar_NSUInteger_blockingTrampoline(
+ ffi.Pointer<objc.ObjCBlockImpl> block,
+ ffi.Pointer<ffi.Void> waiter,
+ ffi.Pointer<ffi.UnsignedShort> arg0,
+ int arg1) {
+ try {
+ (objc.getBlockClosure(block) as void Function(
+ ffi.Pointer<ffi.UnsignedShort>, int))(arg0, arg1);
+ } catch (e) {
+ } finally {
+ objc.signalWaiter(waiter);
+ objc.objectRelease(block.cast());
+ }
+}
+
+ffi.NativeCallable<
+ ffi.Void Function(
+ ffi.Pointer<objc.ObjCBlockImpl>,
+ ffi.Pointer<ffi.Void>,
+ ffi.Pointer<ffi.UnsignedShort>,
+ ffi.UnsignedLong)>
+ _ObjCBlock_ffiVoid_unichar_NSUInteger_blockingCallable = ffi.NativeCallable<
+ ffi.Void Function(
+ ffi.Pointer<objc.ObjCBlockImpl>,
+ ffi.Pointer<ffi.Void>,
+ ffi.Pointer<ffi.UnsignedShort>,
+ ffi.UnsignedLong)>.isolateLocal(
+ _ObjCBlock_ffiVoid_unichar_NSUInteger_blockingTrampoline)
+ ..keepIsolateAlive = false;
+ffi.NativeCallable<
+ ffi.Void Function(
+ ffi.Pointer<objc.ObjCBlockImpl>,
+ ffi.Pointer<ffi.Void>,
+ ffi.Pointer<ffi.UnsignedShort>,
+ ffi.UnsignedLong)>
+ _ObjCBlock_ffiVoid_unichar_NSUInteger_blockingListenerCallable = ffi
+ .NativeCallable<
+ ffi.Void Function(
+ ffi.Pointer<objc.ObjCBlockImpl>,
+ ffi.Pointer<ffi.Void>,
+ ffi.Pointer<ffi.UnsignedShort>,
+ ffi.UnsignedLong)>.listener(
+ _ObjCBlock_ffiVoid_unichar_NSUInteger_blockingTrampoline)
+ ..keepIsolateAlive = false;
+
+/// Construction methods for `objc.ObjCBlock<ffi.Void Function(ffi.Pointer<ffi.UnsignedShort>, ffi.UnsignedLong)>`.
+abstract final class ObjCBlock_ffiVoid_unichar_NSUInteger {
+ /// Returns a block that wraps the given raw block pointer.
+ static objc.ObjCBlock<
+ ffi.Void Function(ffi.Pointer<ffi.UnsignedShort>, ffi.UnsignedLong)>
+ castFromPointer(ffi.Pointer<objc.ObjCBlockImpl> pointer,
+ {bool retain = false, bool release = false}) =>
+ objc.ObjCBlock<
+ ffi.Void Function(ffi.Pointer<ffi.UnsignedShort>,
+ ffi.UnsignedLong)>(pointer, retain: retain, release: release);
+
+ /// Creates a block from a C function pointer.
+ ///
+ /// This block must be invoked by native code running on the same thread as
+ /// the isolate that registered it. Invoking the block on the wrong thread
+ /// will result in a crash.
+ static objc.ObjCBlock<ffi.Void Function(ffi.Pointer<ffi.UnsignedShort>, ffi.UnsignedLong)> fromFunctionPointer(
+ ffi.Pointer<
+ ffi.NativeFunction<
+ ffi.Void Function(ffi.Pointer<ffi.UnsignedShort> arg0,
+ ffi.UnsignedLong arg1)>>
+ ptr) =>
+ objc.ObjCBlock<ffi.Void Function(ffi.Pointer<ffi.UnsignedShort>, ffi.UnsignedLong)>(
+ objc.newPointerBlock(_ObjCBlock_ffiVoid_unichar_NSUInteger_fnPtrCallable, ptr.cast()),
+ retain: false,
+ release: true);
+
+ /// Creates a block from a Dart function.
+ ///
+ /// This block must be invoked by native code running on the same thread as
+ /// the isolate that registered it. Invoking the block on the wrong thread
+ /// will result in a crash.
+ ///
+ /// If `keepIsolateAlive` is true, this block will keep this isolate alive
+ /// until it is garbage collected by both Dart and ObjC.
+ static objc.ObjCBlock<ffi.Void Function(ffi.Pointer<ffi.UnsignedShort>, ffi.UnsignedLong)>
+ fromFunction(void Function(ffi.Pointer<ffi.UnsignedShort>, int) fn,
+ {bool keepIsolateAlive = true}) =>
+ objc.ObjCBlock<
+ ffi.Void Function(
+ ffi.Pointer<ffi.UnsignedShort>, ffi.UnsignedLong)>(
+ objc.newClosureBlock(
+ _ObjCBlock_ffiVoid_unichar_NSUInteger_closureCallable,
+ (ffi.Pointer<ffi.UnsignedShort> arg0, int arg1) =>
+ fn(arg0, arg1),
+ keepIsolateAlive),
+ retain: false,
+ release: true);
+
+ /// Creates a listener block from a Dart function.
+ ///
+ /// This is based on FFI's NativeCallable.listener, and has the same
+ /// capabilities and limitations. This block can be invoked from any thread,
+ /// but only supports void functions, and is not run synchronously. See
+ /// NativeCallable.listener for more details.
+ ///
+ /// If `keepIsolateAlive` is true, this block will keep this isolate alive
+ /// until it is garbage collected by both Dart and ObjC.
+ static objc.ObjCBlock<
+ ffi.Void Function(ffi.Pointer<ffi.UnsignedShort>, ffi.UnsignedLong)>
+ listener(void Function(ffi.Pointer<ffi.UnsignedShort>, int) fn,
+ {bool keepIsolateAlive = true}) {
+ final raw = objc.newClosureBlock(
+ _ObjCBlock_ffiVoid_unichar_NSUInteger_listenerCallable.nativeFunction
+ .cast(),
+ (ffi.Pointer<ffi.UnsignedShort> arg0, int arg1) => fn(arg0, arg1),
+ keepIsolateAlive);
+ final wrapper = _ObjectiveCBindings_wrapListenerBlock_vhbh5h(raw);
+ objc.objectRelease(raw.cast());
+ return objc.ObjCBlock<
+ ffi.Void Function(ffi.Pointer<ffi.UnsignedShort>,
+ ffi.UnsignedLong)>(wrapper, retain: false, release: true);
+ }
+
+ /// Creates a blocking block from a Dart function.
+ ///
+ /// This callback can be invoked from any native thread, and will block the
+ /// caller until the callback is handled by the Dart isolate that created
+ /// the block. Async functions are not supported.
+ ///
+ /// If `keepIsolateAlive` is true, this block will keep this isolate alive
+ /// until it is garbage collected by both Dart and ObjC. If the owner isolate
+ /// has shut down, and the block is invoked by native code, it may block
+ /// indefinitely, or have other undefined behavior.
+ static objc.ObjCBlock<
+ ffi.Void Function(ffi.Pointer<ffi.UnsignedShort>, ffi.UnsignedLong)>
+ blocking(void Function(ffi.Pointer<ffi.UnsignedShort>, int) fn,
+ {bool keepIsolateAlive = true}) {
+ final raw = objc.newClosureBlock(
+ _ObjCBlock_ffiVoid_unichar_NSUInteger_blockingCallable.nativeFunction
+ .cast(),
+ (ffi.Pointer<ffi.UnsignedShort> arg0, int arg1) => fn(arg0, arg1),
+ keepIsolateAlive);
+ final rawListener = objc.newClosureBlock(
+ _ObjCBlock_ffiVoid_unichar_NSUInteger_blockingListenerCallable
+ .nativeFunction
+ .cast(),
+ (ffi.Pointer<ffi.UnsignedShort> arg0, int arg1) => fn(arg0, arg1),
+ keepIsolateAlive);
+ final wrapper = _ObjectiveCBindings_wrapBlockingBlock_vhbh5h(
+ raw, rawListener, objc.objCContext);
+ objc.objectRelease(raw.cast());
+ objc.objectRelease(rawListener.cast());
+ return objc.ObjCBlock<
+ ffi.Void Function(ffi.Pointer<ffi.UnsignedShort>,
+ ffi.UnsignedLong)>(wrapper, retain: false, release: true);
+ }
+}
+
+/// Call operator for `objc.ObjCBlock<ffi.Void Function(ffi.Pointer<ffi.UnsignedShort>, ffi.UnsignedLong)>`.
+extension ObjCBlock_ffiVoid_unichar_NSUInteger_CallExtension on objc.ObjCBlock<
+ ffi.Void Function(ffi.Pointer<ffi.UnsignedShort>, ffi.UnsignedLong)> {
+ void call(ffi.Pointer<ffi.UnsignedShort> arg0, int arg1) => ref
+ .pointer.ref.invoke
+ .cast<
+ ffi.NativeFunction<
+ ffi.Void Function(
+ ffi.Pointer<objc.ObjCBlockImpl> block,
+ ffi.Pointer<ffi.UnsignedShort> arg0,
+ ffi.UnsignedLong arg1)>>()
+ .asFunction<
+ void Function(ffi.Pointer<objc.ObjCBlockImpl>,
+ ffi.Pointer<ffi.UnsignedShort>, int)>()(ref.pointer, arg0, arg1);
+}
+
instancetype _ObjCBlock_instancetype_ffiVoid_NSCoder_fnPtrTrampoline(
ffi.Pointer<objc.ObjCBlockImpl> block,
ffi.Pointer<ffi.Void> arg0,
@@ -16353,6 +23392,126 @@
release: true);
}
+ffi.Pointer<objc.ObjCObject>
+ _ObjCBlock_objcObjCObject_NSError_NSErrorUserInfoKey_fnPtrTrampoline(
+ ffi.Pointer<objc.ObjCBlockImpl> block,
+ ffi.Pointer<objc.ObjCObject> arg0,
+ ffi.Pointer<objc.ObjCObject> arg1) =>
+ block.ref.target
+ .cast<
+ ffi.NativeFunction<
+ ffi.Pointer<objc.ObjCObject> Function(
+ ffi.Pointer<objc.ObjCObject> arg0,
+ ffi.Pointer<objc.ObjCObject> arg1)>>()
+ .asFunction<
+ ffi.Pointer<objc.ObjCObject> Function(
+ ffi.Pointer<objc.ObjCObject>,
+ ffi.Pointer<objc.ObjCObject>)>()(arg0, arg1);
+ffi.Pointer<ffi.Void>
+ _ObjCBlock_objcObjCObject_NSError_NSErrorUserInfoKey_fnPtrCallable =
+ ffi.Pointer.fromFunction<
+ ffi.Pointer<objc.ObjCObject> Function(
+ ffi.Pointer<objc.ObjCBlockImpl>,
+ ffi.Pointer<objc.ObjCObject>,
+ ffi.Pointer<objc.ObjCObject>)>(
+ _ObjCBlock_objcObjCObject_NSError_NSErrorUserInfoKey_fnPtrTrampoline)
+ .cast();
+ffi.Pointer<objc.ObjCObject>
+ _ObjCBlock_objcObjCObject_NSError_NSErrorUserInfoKey_closureTrampoline(
+ ffi.Pointer<objc.ObjCBlockImpl> block,
+ ffi.Pointer<objc.ObjCObject> arg0,
+ ffi.Pointer<objc.ObjCObject> arg1) =>
+ (objc.getBlockClosure(block) as ffi.Pointer<objc.ObjCObject> Function(
+ ffi.Pointer<objc.ObjCObject>,
+ ffi.Pointer<objc.ObjCObject>))(arg0, arg1);
+ffi.Pointer<ffi.Void>
+ _ObjCBlock_objcObjCObject_NSError_NSErrorUserInfoKey_closureCallable =
+ ffi.Pointer.fromFunction<
+ ffi.Pointer<objc.ObjCObject> Function(
+ ffi.Pointer<objc.ObjCBlockImpl>,
+ ffi.Pointer<objc.ObjCObject>,
+ ffi.Pointer<objc.ObjCObject>)>(
+ _ObjCBlock_objcObjCObject_NSError_NSErrorUserInfoKey_closureTrampoline)
+ .cast();
+
+/// Construction methods for `objc.ObjCBlock<ffi.Pointer<objc.ObjCObject>? Function(NSError, NSString)>`.
+abstract final class ObjCBlock_objcObjCObject_NSError_NSErrorUserInfoKey {
+ /// Returns a block that wraps the given raw block pointer.
+ static objc
+ .ObjCBlock<ffi.Pointer<objc.ObjCObject>? Function(NSError, NSString)>
+ castFromPointer(ffi.Pointer<objc.ObjCBlockImpl> pointer,
+ {bool retain = false, bool release = false}) =>
+ objc.ObjCBlock<
+ ffi.Pointer<objc.ObjCObject>? Function(NSError,
+ NSString)>(pointer, retain: retain, release: release);
+
+ /// Creates a block from a C function pointer.
+ ///
+ /// This block must be invoked by native code running on the same thread as
+ /// the isolate that registered it. Invoking the block on the wrong thread
+ /// will result in a crash.
+ static objc.ObjCBlock<ffi.Pointer<objc.ObjCObject>? Function(NSError, NSString)> fromFunctionPointer(
+ ffi.Pointer<
+ ffi.NativeFunction<
+ ffi.Pointer<objc.ObjCObject> Function(
+ ffi.Pointer<objc.ObjCObject> arg0,
+ ffi.Pointer<objc.ObjCObject> arg1)>>
+ ptr) =>
+ objc.ObjCBlock<ffi.Pointer<objc.ObjCObject>? Function(NSError, NSString)>(
+ objc.newPointerBlock(_ObjCBlock_objcObjCObject_NSError_NSErrorUserInfoKey_fnPtrCallable, ptr.cast()),
+ retain: false,
+ release: true);
+
+ /// Creates a block from a Dart function.
+ ///
+ /// This block must be invoked by native code running on the same thread as
+ /// the isolate that registered it. Invoking the block on the wrong thread
+ /// will result in a crash.
+ ///
+ /// If `keepIsolateAlive` is true, this block will keep this isolate alive
+ /// until it is garbage collected by both Dart and ObjC.
+ static objc.ObjCBlock<ffi.Pointer<objc.ObjCObject>? Function(NSError, NSString)> fromFunction(
+ objc.ObjCObjectBase? Function(NSError, NSString) fn,
+ {bool keepIsolateAlive = true}) =>
+ objc.ObjCBlock<ffi.Pointer<objc.ObjCObject>? Function(NSError, NSString)>(
+ objc.newClosureBlock(
+ _ObjCBlock_objcObjCObject_NSError_NSErrorUserInfoKey_closureCallable,
+ (ffi.Pointer<objc.ObjCObject> arg0,
+ ffi.Pointer<objc.ObjCObject> arg1) =>
+ fn(NSError.castFromPointer(arg0, retain: true, release: true), NSString.castFromPointer(arg1, retain: true, release: true))
+ ?.ref
+ .retainAndAutorelease() ??
+ ffi.nullptr,
+ keepIsolateAlive),
+ retain: false,
+ release: true);
+}
+
+/// Call operator for `objc.ObjCBlock<ffi.Pointer<objc.ObjCObject>? Function(NSError, NSString)>`.
+extension ObjCBlock_objcObjCObject_NSError_NSErrorUserInfoKey_CallExtension
+ on objc
+ .ObjCBlock<ffi.Pointer<objc.ObjCObject>? Function(NSError, NSString)> {
+ objc.ObjCObjectBase? call(NSError arg0, NSString arg1) => ref
+ .pointer.ref.invoke
+ .cast<
+ ffi.NativeFunction<
+ ffi.Pointer<objc.ObjCObject> Function(
+ ffi.Pointer<objc.ObjCBlockImpl> block,
+ ffi.Pointer<objc.ObjCObject> arg0,
+ ffi.Pointer<objc.ObjCObject> arg1)>>()
+ .asFunction<ffi.Pointer<objc.ObjCObject> Function(ffi.Pointer<objc.ObjCBlockImpl>, ffi.Pointer<objc.ObjCObject>, ffi.Pointer<objc.ObjCObject>)>()
+ (ref.pointer, arg0.ref.pointer, arg1.ref.pointer)
+ .address ==
+ 0
+ ? null
+ : objc.ObjCObjectBase(
+ ref.pointer.ref.invoke
+ .cast<ffi.NativeFunction<ffi.Pointer<objc.ObjCObject> Function(ffi.Pointer<objc.ObjCBlockImpl> block, ffi.Pointer<objc.ObjCObject> arg0, ffi.Pointer<objc.ObjCObject> arg1)>>()
+ .asFunction<ffi.Pointer<objc.ObjCObject> Function(ffi.Pointer<objc.ObjCBlockImpl>, ffi.Pointer<objc.ObjCObject>, ffi.Pointer<objc.ObjCObject>)>()(ref.pointer, arg0.ref.pointer, arg1.ref.pointer),
+ retain: true,
+ release: true);
+}
+
ffi.Pointer<objc.ObjCObject> _ObjCBlock_objcObjCObject_ffiVoid_fnPtrTrampoline(
ffi.Pointer<objc.ObjCBlockImpl> block, ffi.Pointer<ffi.Void> arg0) =>
block.ref.target
@@ -17004,6 +24163,7 @@
late final _class_DOBJCDartProtocol = objc.getClass("DOBJCDartProtocol");
late final _class_DOBJCDartProtocolBuilder =
objc.getClass("DOBJCDartProtocolBuilder");
+late final _class_DOBJCObserver = objc.getClass("DOBJCObserver");
late final _class_NSArray = objc.getClass("NSArray");
late final _class_NSCharacterSet = objc.getClass("NSCharacterSet");
late final _class_NSCoder = objc.getClass("NSCoder");
@@ -17073,6 +24233,16 @@
ffi.Pointer<objc.ObjCSelector>,
ffi.Pointer<objc.ObjCObject>,
int)>();
+final _objc_msgSend_10mlopr = objc.msgSendPointer
+ .cast<
+ ffi.NativeFunction<
+ ffi.UnsignedLong Function(
+ ffi.Pointer<objc.ObjCObject>,
+ ffi.Pointer<objc.ObjCSelector>,
+ ffi.Pointer<objc.ObjCBlockImpl>)>>()
+ .asFunction<
+ int Function(ffi.Pointer<objc.ObjCObject>,
+ ffi.Pointer<objc.ObjCSelector>, ffi.Pointer<objc.ObjCBlockImpl>)>();
final _objc_msgSend_11cbyu0 = objc.msgSendPointer
.cast<
ffi.NativeFunction<
@@ -17138,6 +24308,22 @@
.asFunction<
int Function(ffi.Pointer<objc.ObjCObject>,
ffi.Pointer<objc.ObjCSelector>, int)>();
+final _objc_msgSend_134vhyh = objc.msgSendPointer
+ .cast<
+ ffi.NativeFunction<
+ ffi.Pointer<objc.ObjCObject> Function(
+ ffi.Pointer<objc.ObjCObject>,
+ ffi.Pointer<objc.ObjCSelector>,
+ ffi.Pointer<ffi.Void>,
+ ffi.UnsignedLong,
+ ffi.Pointer<objc.ObjCBlockImpl>)>>()
+ .asFunction<
+ ffi.Pointer<objc.ObjCObject> Function(
+ ffi.Pointer<objc.ObjCObject>,
+ ffi.Pointer<objc.ObjCSelector>,
+ ffi.Pointer<ffi.Void>,
+ int,
+ ffi.Pointer<objc.ObjCBlockImpl>)>();
final _objc_msgSend_13mclwd = objc.msgSendPointer
.cast<
ffi.NativeFunction<
@@ -17146,6 +24332,20 @@
.asFunction<
ffi.Pointer<objc.ObjCObject> Function(ffi.Pointer<objc.ObjCObject>,
ffi.Pointer<objc.ObjCSelector>, int)>();
+final _objc_msgSend_13x5boi = objc.msgSendPointer
+ .cast<
+ ffi.NativeFunction<
+ ffi.Pointer<objc.ObjCObject> Function(
+ ffi.Pointer<objc.ObjCObject>,
+ ffi.Pointer<objc.ObjCSelector>,
+ ffi.UnsignedLong,
+ ffi.Pointer<objc.ObjCBlockImpl>)>>()
+ .asFunction<
+ ffi.Pointer<objc.ObjCObject> Function(
+ ffi.Pointer<objc.ObjCObject>,
+ ffi.Pointer<objc.ObjCSelector>,
+ int,
+ ffi.Pointer<objc.ObjCBlockImpl>)>();
final _objc_msgSend_13yqbb6 = objc.msgSendPointer
.cast<
ffi.NativeFunction<
@@ -17154,6 +24354,22 @@
.asFunction<
int Function(
ffi.Pointer<objc.ObjCObject>, ffi.Pointer<objc.ObjCSelector>)>();
+final _objc_msgSend_14ew8zr = objc.msgSendPointer
+ .cast<
+ ffi.NativeFunction<
+ ffi.Void Function(
+ ffi.Pointer<objc.ObjCObject>,
+ ffi.Pointer<objc.ObjCSelector>,
+ NSRange,
+ ffi.UnsignedLong,
+ ffi.Pointer<objc.ObjCBlockImpl>)>>()
+ .asFunction<
+ void Function(
+ ffi.Pointer<objc.ObjCObject>,
+ ffi.Pointer<objc.ObjCSelector>,
+ NSRange,
+ int,
+ ffi.Pointer<objc.ObjCBlockImpl>)>();
final _objc_msgSend_14hpxwa = objc.msgSendPointer
.cast<
ffi.NativeFunction<
@@ -17257,6 +24473,20 @@
ffi.Pointer<ffi.Void>,
int,
bool)>();
+final _objc_msgSend_1698hqz = objc.msgSendPointer
+ .cast<
+ ffi.NativeFunction<
+ ffi.UnsignedLong Function(
+ ffi.Pointer<objc.ObjCObject>,
+ ffi.Pointer<objc.ObjCSelector>,
+ ffi.UnsignedLong,
+ ffi.Pointer<objc.ObjCBlockImpl>)>>()
+ .asFunction<
+ int Function(
+ ffi.Pointer<objc.ObjCObject>,
+ ffi.Pointer<objc.ObjCSelector>,
+ int,
+ ffi.Pointer<objc.ObjCBlockImpl>)>();
final _objc_msgSend_16f0drb = objc.msgSendPointer
.cast<
ffi.NativeFunction<
@@ -17275,6 +24505,22 @@
.asFunction<
int Function(ffi.Pointer<objc.ObjCObject>,
ffi.Pointer<objc.ObjCSelector>, ffi.Pointer<objc.ObjCObject>)>();
+final _objc_msgSend_177cajs = objc.msgSendPointer
+ .cast<
+ ffi.NativeFunction<
+ ffi.Void Function(
+ ffi.Pointer<objc.ObjCObject>,
+ ffi.Pointer<objc.ObjCSelector>,
+ NSRange,
+ ffi.UnsignedLong,
+ ffi.Pointer<objc.ObjCBlockImpl>)>>()
+ .asFunction<
+ void Function(
+ ffi.Pointer<objc.ObjCObject>,
+ ffi.Pointer<objc.ObjCSelector>,
+ NSRange,
+ int,
+ ffi.Pointer<objc.ObjCBlockImpl>)>();
final _objc_msgSend_17amj0z = objc.msgSendPointer
.cast<
ffi.NativeFunction<
@@ -17690,6 +24936,22 @@
.asFunction<
void Function(ffi.Pointer<objc.ObjCObject>,
ffi.Pointer<objc.ObjCSelector>, int)>();
+final _objc_msgSend_1i9v144 = objc.msgSendPointer
+ .cast<
+ ffi.NativeFunction<
+ ffi.Pointer<objc.ObjCObject> Function(
+ ffi.Pointer<objc.ObjCObject>,
+ ffi.Pointer<objc.ObjCSelector>,
+ ffi.Pointer<objc.ObjCObject>,
+ ffi.UnsignedLong,
+ ffi.Pointer<objc.ObjCBlockImpl>)>>()
+ .asFunction<
+ ffi.Pointer<objc.ObjCObject> Function(
+ ffi.Pointer<objc.ObjCObject>,
+ ffi.Pointer<objc.ObjCSelector>,
+ ffi.Pointer<objc.ObjCObject>,
+ int,
+ ffi.Pointer<objc.ObjCBlockImpl>)>();
final _objc_msgSend_1iyq28l = objc.msgSendPointer
.cast<
ffi.NativeFunction<
@@ -17806,6 +25068,24 @@
.asFunction<
int Function(
ffi.Pointer<objc.ObjCObject>, ffi.Pointer<objc.ObjCSelector>)>();
+final _objc_msgSend_1lbgrac = objc.msgSendPointer
+ .cast<
+ ffi.NativeFunction<
+ ffi.Pointer<objc.ObjCObject> Function(
+ ffi.Pointer<objc.ObjCObject>,
+ ffi.Pointer<objc.ObjCSelector>,
+ ffi.Pointer<ffi.Void>,
+ ffi.UnsignedLong,
+ ffi.UnsignedLong,
+ ffi.Pointer<objc.ObjCBlockImpl>)>>()
+ .asFunction<
+ ffi.Pointer<objc.ObjCObject> Function(
+ ffi.Pointer<objc.ObjCObject>,
+ ffi.Pointer<objc.ObjCSelector>,
+ ffi.Pointer<ffi.Void>,
+ int,
+ int,
+ ffi.Pointer<objc.ObjCBlockImpl>)>();
final _objc_msgSend_1lhpu4m = objc.msgSendPointer
.cast<
ffi.NativeFunction<
@@ -17977,6 +25257,40 @@
ffi.Pointer<objc.ObjCObject>,
ffi.Pointer<objc.ObjCSelector>,
ffi.Pointer<objc.ObjCSelector>)>();
+final _objc_msgSend_1pl40xc = objc.msgSendPointer
+ .cast<
+ ffi.NativeFunction<
+ ffi.Void Function(
+ ffi.Pointer<objc.ObjCObject>,
+ ffi.Pointer<objc.ObjCSelector>,
+ ffi.Pointer<objc.ObjCObject>,
+ ffi.Long,
+ ffi.Pointer<objc.ObjCBlockImpl>)>>()
+ .asFunction<
+ void Function(
+ ffi.Pointer<objc.ObjCObject>,
+ ffi.Pointer<objc.ObjCSelector>,
+ ffi.Pointer<objc.ObjCObject>,
+ int,
+ ffi.Pointer<objc.ObjCBlockImpl>)>();
+final _objc_msgSend_1pl4k3n = objc.msgSendPointer
+ .cast<
+ ffi.NativeFunction<
+ ffi.Void Function(
+ ffi.Pointer<objc.ObjCObject>,
+ ffi.Pointer<objc.ObjCSelector>,
+ ffi.Pointer<objc.ObjCObject>,
+ ffi.Pointer<objc.ObjCObject>,
+ ffi.Pointer<objc.ObjCObject>,
+ ffi.Pointer<ffi.Void>)>>()
+ .asFunction<
+ void Function(
+ ffi.Pointer<objc.ObjCObject>,
+ ffi.Pointer<objc.ObjCSelector>,
+ ffi.Pointer<objc.ObjCObject>,
+ ffi.Pointer<objc.ObjCObject>,
+ ffi.Pointer<objc.ObjCObject>,
+ ffi.Pointer<ffi.Void>)>();
final _objc_msgSend_1pl9qdv = objc.msgSendPointer
.cast<
ffi.NativeFunction<
@@ -18001,6 +25315,22 @@
ffi.Pointer<objc.ObjCObject>,
ffi.Pointer<objc.ObjCObject>,
ffi.Pointer<ffi.Pointer<objc.ObjCObject>>)>();
+final _objc_msgSend_1q30cs4 = objc.msgSendPointer
+ .cast<
+ ffi.NativeFunction<
+ ffi.Pointer<objc.ObjCObject> Function(
+ ffi.Pointer<objc.ObjCObject>,
+ ffi.Pointer<objc.ObjCSelector>,
+ NSRange,
+ ffi.UnsignedLong,
+ ffi.Pointer<objc.ObjCBlockImpl>)>>()
+ .asFunction<
+ ffi.Pointer<objc.ObjCObject> Function(
+ ffi.Pointer<objc.ObjCObject>,
+ ffi.Pointer<objc.ObjCSelector>,
+ NSRange,
+ int,
+ ffi.Pointer<objc.ObjCBlockImpl>)>();
final _objc_msgSend_1qv0eq4 = objc.msgSendPointer
.cast<
ffi.NativeFunction<
@@ -18025,6 +25355,24 @@
.asFunction<
int Function(ffi.Pointer<objc.ObjCObject>,
ffi.Pointer<objc.ObjCSelector>, ffi.Pointer<objc.ObjCObject>)>();
+final _objc_msgSend_1s0rfm3 = objc.msgSendPointer
+ .cast<
+ ffi.NativeFunction<
+ ffi.Pointer<objc.ObjCObject> Function(
+ ffi.Pointer<objc.ObjCObject>,
+ ffi.Pointer<objc.ObjCSelector>,
+ ffi.Pointer<objc.ObjCObject>,
+ ffi.Double,
+ ffi.Bool,
+ ffi.Pointer<objc.ObjCBlockImpl>)>>()
+ .asFunction<
+ ffi.Pointer<objc.ObjCObject> Function(
+ ffi.Pointer<objc.ObjCObject>,
+ ffi.Pointer<objc.ObjCSelector>,
+ ffi.Pointer<objc.ObjCObject>,
+ double,
+ bool,
+ ffi.Pointer<objc.ObjCBlockImpl>)>();
final _objc_msgSend_1s2gdyk = objc.msgSendPointer
.cast<
ffi.NativeFunction<
@@ -18215,6 +25563,20 @@
.asFunction<
ffi.Pointer<objc.ObjCObject> Function(ffi.Pointer<objc.ObjCObject>,
ffi.Pointer<objc.ObjCSelector>, int)>();
+final _objc_msgSend_1x5ew3h = objc.msgSendPointer
+ .cast<
+ ffi.NativeFunction<
+ ffi.Pointer<objc.ObjCObject> Function(
+ ffi.Pointer<objc.ObjCObject>,
+ ffi.Pointer<objc.ObjCSelector>,
+ ffi.UnsignedLong,
+ ffi.Pointer<objc.ObjCBlockImpl>)>>()
+ .asFunction<
+ ffi.Pointer<objc.ObjCObject> Function(
+ ffi.Pointer<objc.ObjCObject>,
+ ffi.Pointer<objc.ObjCSelector>,
+ int,
+ ffi.Pointer<objc.ObjCBlockImpl>)>();
final _objc_msgSend_1xi08ar = objc.msgSendPointer
.cast<
ffi.NativeFunction<
@@ -18291,6 +25653,22 @@
ffi.Pointer<objc.ObjCObject>,
int,
NSRange)>();
+final _objc_msgSend_2wiv66 = objc.msgSendPointer
+ .cast<
+ ffi.NativeFunction<
+ ffi.Pointer<objc.ObjCObject> Function(
+ ffi.Pointer<objc.ObjCObject>,
+ ffi.Pointer<objc.ObjCSelector>,
+ ffi.Pointer<objc.ObjCObject>,
+ ffi.Pointer<objc.ObjCObject>,
+ ffi.Pointer<objc.ObjCBlockImpl>)>>()
+ .asFunction<
+ ffi.Pointer<objc.ObjCObject> Function(
+ ffi.Pointer<objc.ObjCObject>,
+ ffi.Pointer<objc.ObjCSelector>,
+ ffi.Pointer<objc.ObjCObject>,
+ ffi.Pointer<objc.ObjCObject>,
+ ffi.Pointer<objc.ObjCBlockImpl>)>();
final _objc_msgSend_3cbdpb = objc.msgSendPointer
.cast<
ffi.NativeFunction<
@@ -18378,6 +25756,22 @@
.asFunction<
ffi.Pointer<ffi.Void> Function(
ffi.Pointer<objc.ObjCObject>, ffi.Pointer<objc.ObjCSelector>)>();
+final _objc_msgSend_6jmuyz = objc.msgSendPointer
+ .cast<
+ ffi.NativeFunction<
+ ffi.UnsignedLong Function(
+ ffi.Pointer<objc.ObjCObject>,
+ ffi.Pointer<objc.ObjCSelector>,
+ NSRange,
+ ffi.UnsignedLong,
+ ffi.Pointer<objc.ObjCBlockImpl>)>>()
+ .asFunction<
+ int Function(
+ ffi.Pointer<objc.ObjCObject>,
+ ffi.Pointer<objc.ObjCSelector>,
+ NSRange,
+ int,
+ ffi.Pointer<objc.ObjCBlockImpl>)>();
final _objc_msgSend_6peh6o = objc.msgSendPointer
.cast<
ffi.NativeFunction<
@@ -18497,6 +25891,22 @@
.asFunction<
bool Function(
ffi.Pointer<objc.ObjCObject>, ffi.Pointer<objc.ObjCSelector>)>();
+final _objc_msgSend_9a64f1 = objc.msgSendPointer
+ .cast<
+ ffi.NativeFunction<
+ ffi.Pointer<objc.ObjCObject> Function(
+ ffi.Pointer<objc.ObjCObject>,
+ ffi.Pointer<objc.ObjCSelector>,
+ ffi.Double,
+ ffi.Bool,
+ ffi.Pointer<objc.ObjCBlockImpl>)>>()
+ .asFunction<
+ ffi.Pointer<objc.ObjCObject> Function(
+ ffi.Pointer<objc.ObjCObject>,
+ ffi.Pointer<objc.ObjCSelector>,
+ double,
+ bool,
+ ffi.Pointer<objc.ObjCBlockImpl>)>();
final _objc_msgSend_9b3h4v = objc.msgSendPointer
.cast<
ffi.NativeFunction<
@@ -18523,6 +25933,38 @@
ffi.Pointer<objc.ObjCSelector>,
ffi.Pointer<ffi.UnsignedShort>,
int)>();
+final _objc_msgSend_a3wp08 = objc.msgSendPointer
+ .cast<
+ ffi.NativeFunction<
+ ffi.Void Function(
+ ffi.Pointer<objc.ObjCObject>,
+ ffi.Pointer<objc.ObjCSelector>,
+ ffi.Pointer<objc.ObjCObject>,
+ ffi.UnsignedLong,
+ ffi.Pointer<objc.ObjCBlockImpl>)>>()
+ .asFunction<
+ void Function(
+ ffi.Pointer<objc.ObjCObject>,
+ ffi.Pointer<objc.ObjCSelector>,
+ ffi.Pointer<objc.ObjCObject>,
+ int,
+ ffi.Pointer<objc.ObjCBlockImpl>)>();
+final _objc_msgSend_arew0j = objc.msgSendPointer
+ .cast<
+ ffi.NativeFunction<
+ ffi.Void Function(
+ ffi.Pointer<objc.ObjCObject>,
+ ffi.Pointer<objc.ObjCSelector>,
+ NSRange,
+ ffi.UnsignedLong,
+ ffi.Pointer<objc.ObjCBlockImpl>)>>()
+ .asFunction<
+ void Function(
+ ffi.Pointer<objc.ObjCObject>,
+ ffi.Pointer<objc.ObjCSelector>,
+ NSRange,
+ int,
+ ffi.Pointer<objc.ObjCBlockImpl>)>();
final _objc_msgSend_bfp043 = objc.msgSendPointer
.cast<
ffi.NativeFunction<
@@ -18580,6 +26022,22 @@
ffi.Pointer<objc.ObjCSelector>,
ffi.Pointer<objc.ObjCObject>,
ffi.Pointer<objc.ObjCObject>)>();
+final _objc_msgSend_cnxxyq = objc.msgSendPointer
+ .cast<
+ ffi.NativeFunction<
+ ffi.Pointer<objc.ObjCBlockImpl> Function(
+ ffi.Pointer<objc.ObjCObject>,
+ ffi.Pointer<objc.ObjCSelector>,
+ ffi.Pointer<objc.ObjCObject>,
+ ffi.Pointer<objc.ObjCObject>,
+ ffi.Pointer<objc.ObjCObject>)>>()
+ .asFunction<
+ ffi.Pointer<objc.ObjCBlockImpl> Function(
+ ffi.Pointer<objc.ObjCObject>,
+ ffi.Pointer<objc.ObjCSelector>,
+ ffi.Pointer<objc.ObjCObject>,
+ ffi.Pointer<objc.ObjCObject>,
+ ffi.Pointer<objc.ObjCObject>)>();
final _objc_msgSend_d3i1uy = objc.msgSendPointer
.cast<
ffi.NativeFunction<
@@ -18721,6 +26179,16 @@
.asFunction<
ffi.Pointer<objc.ObjCObject> Function(ffi.Pointer<objc.ObjCObject>,
ffi.Pointer<objc.ObjCSelector>, double)>();
+final _objc_msgSend_f167m6 = objc.msgSendPointer
+ .cast<
+ ffi.NativeFunction<
+ ffi.Void Function(
+ ffi.Pointer<objc.ObjCObject>,
+ ffi.Pointer<objc.ObjCSelector>,
+ ffi.Pointer<objc.ObjCBlockImpl>)>>()
+ .asFunction<
+ void Function(ffi.Pointer<objc.ObjCObject>,
+ ffi.Pointer<objc.ObjCSelector>, ffi.Pointer<objc.ObjCBlockImpl>)>();
final _objc_msgSend_gcjqkl = objc.msgSendPointer
.cast<
ffi.NativeFunction<
@@ -18867,6 +26335,20 @@
int,
NSRange,
ffi.Pointer<NSRange>)>();
+final _objc_msgSend_jjgvjt = objc.msgSendPointer
+ .cast<
+ ffi.NativeFunction<
+ ffi.Void Function(
+ ffi.Pointer<objc.ObjCObject>,
+ ffi.Pointer<objc.ObjCSelector>,
+ ffi.UnsignedLong,
+ ffi.Pointer<objc.ObjCBlockImpl>)>>()
+ .asFunction<
+ void Function(
+ ffi.Pointer<objc.ObjCObject>,
+ ffi.Pointer<objc.ObjCSelector>,
+ int,
+ ffi.Pointer<objc.ObjCBlockImpl>)>();
final _objc_msgSend_jsclrq = objc.msgSendPointer
.cast<
ffi.NativeFunction<
@@ -18875,6 +26357,22 @@
.asFunction<
bool Function(ffi.Pointer<objc.ObjCObject>,
ffi.Pointer<objc.ObjCSelector>, int)>();
+final _objc_msgSend_k1x6mt = objc.msgSendPointer
+ .cast<
+ ffi.NativeFunction<
+ ffi.UnsignedLong Function(
+ ffi.Pointer<objc.ObjCObject>,
+ ffi.Pointer<objc.ObjCSelector>,
+ ffi.Pointer<objc.ObjCObject>,
+ ffi.UnsignedLong,
+ ffi.Pointer<objc.ObjCBlockImpl>)>>()
+ .asFunction<
+ int Function(
+ ffi.Pointer<objc.ObjCObject>,
+ ffi.Pointer<objc.ObjCSelector>,
+ ffi.Pointer<objc.ObjCObject>,
+ int,
+ ffi.Pointer<objc.ObjCBlockImpl>)>();
final _objc_msgSend_k4j8m3 = objc.msgSendPointer
.cast<
ffi.NativeFunction<
@@ -18893,6 +26391,24 @@
int,
int,
bool)>();
+final _objc_msgSend_kshx9d = objc.msgSendPointer
+ .cast<
+ ffi.NativeFunction<
+ ffi.UnsignedLong Function(
+ ffi.Pointer<objc.ObjCObject>,
+ ffi.Pointer<objc.ObjCSelector>,
+ ffi.Pointer<objc.ObjCObject>,
+ NSRange,
+ ffi.UnsignedLong,
+ ffi.Pointer<objc.ObjCBlockImpl>)>>()
+ .asFunction<
+ int Function(
+ ffi.Pointer<objc.ObjCObject>,
+ ffi.Pointer<objc.ObjCSelector>,
+ ffi.Pointer<objc.ObjCObject>,
+ NSRange,
+ int,
+ ffi.Pointer<objc.ObjCBlockImpl>)>();
final _objc_msgSend_l9p60w = objc.msgSendPointer
.cast<
ffi.NativeFunction<
@@ -18975,6 +26491,16 @@
ffi.Pointer<ffi.Char>,
ffi.Pointer<ffi.Void>,
int)>();
+final _objc_msgSend_nnxkei = objc.msgSendPointer
+ .cast<
+ ffi.NativeFunction<
+ ffi.Pointer<objc.ObjCObject> Function(
+ ffi.Pointer<objc.ObjCObject>,
+ ffi.Pointer<objc.ObjCSelector>,
+ ffi.Pointer<objc.ObjCBlockImpl>)>>()
+ .asFunction<
+ ffi.Pointer<objc.ObjCObject> Function(ffi.Pointer<objc.ObjCObject>,
+ ffi.Pointer<objc.ObjCSelector>, ffi.Pointer<objc.ObjCBlockImpl>)>();
final _objc_msgSend_o16d3k = objc.msgSendPointer
.cast<
ffi.NativeFunction<
@@ -18989,6 +26515,20 @@
ffi.Pointer<objc.ObjCSelector>,
ffi.Pointer<ffi.Pointer<objc.ObjCObject>>,
NSRange)>();
+final _objc_msgSend_o762yo = objc.msgSendPointer
+ .cast<
+ ffi.NativeFunction<
+ ffi.Void Function(
+ ffi.Pointer<objc.ObjCObject>,
+ ffi.Pointer<objc.ObjCSelector>,
+ ffi.Pointer<objc.ObjCObject>,
+ ffi.Pointer<objc.ObjCBlockImpl>)>>()
+ .asFunction<
+ void Function(
+ ffi.Pointer<objc.ObjCObject>,
+ ffi.Pointer<objc.ObjCSelector>,
+ ffi.Pointer<objc.ObjCObject>,
+ ffi.Pointer<objc.ObjCBlockImpl>)>();
final _objc_msgSend_oa8mke = objc.msgSendPointer
.cast<
ffi.NativeFunction<
@@ -19103,6 +26643,20 @@
.asFunction<
ffi.Pointer<objc.ObjCObject> Function(ffi.Pointer<objc.ObjCObject>,
ffi.Pointer<objc.ObjCSelector>, int)>();
+final _objc_msgSend_r0bo0s = objc.msgSendPointer
+ .cast<
+ ffi.NativeFunction<
+ ffi.Pointer<objc.ObjCObject> Function(
+ ffi.Pointer<objc.ObjCObject>,
+ ffi.Pointer<objc.ObjCSelector>,
+ ffi.Pointer<objc.ObjCObject>,
+ ffi.Pointer<objc.ObjCBlockImpl>)>>()
+ .asFunction<
+ ffi.Pointer<objc.ObjCObject> Function(
+ ffi.Pointer<objc.ObjCObject>,
+ ffi.Pointer<objc.ObjCSelector>,
+ ffi.Pointer<objc.ObjCObject>,
+ ffi.Pointer<objc.ObjCBlockImpl>)>();
final _objc_msgSend_r49ehc = objc.msgSendPointer
.cast<
ffi.NativeFunction<
@@ -19161,6 +26715,40 @@
.asFunction<
ffi.Pointer<NSZone> Function(
ffi.Pointer<objc.ObjCObject>, ffi.Pointer<objc.ObjCSelector>)>();
+final _objc_msgSend_t7arir = objc.msgSendPointer
+ .cast<
+ ffi.NativeFunction<
+ ffi.Void Function(
+ ffi.Pointer<objc.ObjCObject>,
+ ffi.Pointer<objc.ObjCSelector>,
+ ffi.Pointer<objc.ObjCObject>,
+ ffi.Long,
+ ffi.Long,
+ ffi.Pointer<objc.ObjCBlockImpl>)>>()
+ .asFunction<
+ void Function(
+ ffi.Pointer<objc.ObjCObject>,
+ ffi.Pointer<objc.ObjCSelector>,
+ ffi.Pointer<objc.ObjCObject>,
+ int,
+ int,
+ ffi.Pointer<objc.ObjCBlockImpl>)>();
+final _objc_msgSend_talwei = objc.msgSendPointer
+ .cast<
+ ffi.NativeFunction<
+ ffi.Pointer<objc.ObjCObject> Function(
+ ffi.Pointer<objc.ObjCObject>,
+ ffi.Pointer<objc.ObjCSelector>,
+ ffi.Pointer<ffi.UnsignedShort>,
+ ffi.UnsignedLong,
+ ffi.Pointer<objc.ObjCBlockImpl>)>>()
+ .asFunction<
+ ffi.Pointer<objc.ObjCObject> Function(
+ ffi.Pointer<objc.ObjCObject>,
+ ffi.Pointer<objc.ObjCSelector>,
+ ffi.Pointer<ffi.UnsignedShort>,
+ int,
+ ffi.Pointer<objc.ObjCBlockImpl>)>();
final _objc_msgSend_ud8gg = objc.msgSendPointer
.cast<
ffi.NativeFunction<
@@ -19276,6 +26864,20 @@
.asFunction<
int Function(
ffi.Pointer<objc.ObjCObject>, ffi.Pointer<objc.ObjCSelector>)>();
+final _objc_msgSend_yx8yc6 = objc.msgSendPointer
+ .cast<
+ ffi.NativeFunction<
+ ffi.Void Function(
+ ffi.Pointer<objc.ObjCObject>,
+ ffi.Pointer<objc.ObjCSelector>,
+ ffi.UnsignedLong,
+ ffi.Pointer<objc.ObjCBlockImpl>)>>()
+ .asFunction<
+ void Function(
+ ffi.Pointer<objc.ObjCObject>,
+ ffi.Pointer<objc.ObjCSelector>,
+ int,
+ ffi.Pointer<objc.ObjCBlockImpl>)>();
final _objc_msgSend_zmbtbd = objc.msgSendPointer
.cast<
ffi.NativeFunction<
@@ -19528,6 +27130,8 @@
objc.registerName("dictionaryWithObjects:forKeys:");
late final _sel_dictionaryWithObjects_forKeys_count_ =
objc.registerName("dictionaryWithObjects:forKeys:count:");
+late final _sel_differenceByTransformingChangesWithBlock_ =
+ objc.registerName("differenceByTransformingChangesWithBlock:");
late final _sel_displayNameForKey_value_ =
objc.registerName("displayNameForKey:value:");
late final _sel_doesNotRecognizeSelector_ =
@@ -19539,6 +27143,34 @@
late final _sel_encodeValueOfObjCType_at_ =
objc.registerName("encodeValueOfObjCType:at:");
late final _sel_encodeWithCoder_ = objc.registerName("encodeWithCoder:");
+late final _sel_enumerateByteRangesUsingBlock_ =
+ objc.registerName("enumerateByteRangesUsingBlock:");
+late final _sel_enumerateIndexesInRange_options_usingBlock_ =
+ objc.registerName("enumerateIndexesInRange:options:usingBlock:");
+late final _sel_enumerateIndexesUsingBlock_ =
+ objc.registerName("enumerateIndexesUsingBlock:");
+late final _sel_enumerateIndexesWithOptions_usingBlock_ =
+ objc.registerName("enumerateIndexesWithOptions:usingBlock:");
+late final _sel_enumerateKeysAndObjectsUsingBlock_ =
+ objc.registerName("enumerateKeysAndObjectsUsingBlock:");
+late final _sel_enumerateKeysAndObjectsWithOptions_usingBlock_ =
+ objc.registerName("enumerateKeysAndObjectsWithOptions:usingBlock:");
+late final _sel_enumerateLinesUsingBlock_ =
+ objc.registerName("enumerateLinesUsingBlock:");
+late final _sel_enumerateObjectsAtIndexes_options_usingBlock_ =
+ objc.registerName("enumerateObjectsAtIndexes:options:usingBlock:");
+late final _sel_enumerateObjectsUsingBlock_ =
+ objc.registerName("enumerateObjectsUsingBlock:");
+late final _sel_enumerateObjectsWithOptions_usingBlock_ =
+ objc.registerName("enumerateObjectsWithOptions:usingBlock:");
+late final _sel_enumerateRangesInRange_options_usingBlock_ =
+ objc.registerName("enumerateRangesInRange:options:usingBlock:");
+late final _sel_enumerateRangesUsingBlock_ =
+ objc.registerName("enumerateRangesUsingBlock:");
+late final _sel_enumerateRangesWithOptions_usingBlock_ =
+ objc.registerName("enumerateRangesWithOptions:usingBlock:");
+late final _sel_enumerateSubstringsInRange_options_usingBlock_ =
+ objc.registerName("enumerateSubstringsInRange:options:usingBlock:");
late final _sel_errorWithDomain_code_userInfo_ =
objc.registerName("errorWithDomain:code:userInfo:");
late final _sel_exchangeObjectAtIndex_withObjectAtIndex_ =
@@ -19625,20 +27257,44 @@
objc.registerName("indexGreaterThanIndex:");
late final _sel_indexGreaterThanOrEqualToIndex_ =
objc.registerName("indexGreaterThanOrEqualToIndex:");
+late final _sel_indexInRange_options_passingTest_ =
+ objc.registerName("indexInRange:options:passingTest:");
late final _sel_indexLessThanIndex_ = objc.registerName("indexLessThanIndex:");
late final _sel_indexLessThanOrEqualToIndex_ =
objc.registerName("indexLessThanOrEqualToIndex:");
+late final _sel_indexOfObjectAtIndexes_options_passingTest_ =
+ objc.registerName("indexOfObjectAtIndexes:options:passingTest:");
late final _sel_indexOfObjectIdenticalTo_ =
objc.registerName("indexOfObjectIdenticalTo:");
late final _sel_indexOfObjectIdenticalTo_inRange_ =
objc.registerName("indexOfObjectIdenticalTo:inRange:");
+late final _sel_indexOfObjectPassingTest_ =
+ objc.registerName("indexOfObjectPassingTest:");
+late final _sel_indexOfObjectWithOptions_passingTest_ =
+ objc.registerName("indexOfObjectWithOptions:passingTest:");
late final _sel_indexOfObject_ = objc.registerName("indexOfObject:");
late final _sel_indexOfObject_inRange_ =
objc.registerName("indexOfObject:inRange:");
+late final _sel_indexOfObject_inSortedRange_options_usingComparator_ =
+ objc.registerName("indexOfObject:inSortedRange:options:usingComparator:");
+late final _sel_indexPassingTest_ = objc.registerName("indexPassingTest:");
late final _sel_indexSet = objc.registerName("indexSet");
late final _sel_indexSetWithIndex_ = objc.registerName("indexSetWithIndex:");
late final _sel_indexSetWithIndexesInRange_ =
objc.registerName("indexSetWithIndexesInRange:");
+late final _sel_indexWithOptions_passingTest_ =
+ objc.registerName("indexWithOptions:passingTest:");
+late final _sel_indexesInRange_options_passingTest_ =
+ objc.registerName("indexesInRange:options:passingTest:");
+late final _sel_indexesOfObjectsAtIndexes_options_passingTest_ =
+ objc.registerName("indexesOfObjectsAtIndexes:options:passingTest:");
+late final _sel_indexesOfObjectsPassingTest_ =
+ objc.registerName("indexesOfObjectsPassingTest:");
+late final _sel_indexesOfObjectsWithOptions_passingTest_ =
+ objc.registerName("indexesOfObjectsWithOptions:passingTest:");
+late final _sel_indexesPassingTest_ = objc.registerName("indexesPassingTest:");
+late final _sel_indexesWithOptions_passingTest_ =
+ objc.registerName("indexesWithOptions:passingTest:");
late final _sel_init = objc.registerName("init");
late final _sel_initAbsoluteURLWithDataRepresentation_relativeToURL_ =
objc.registerName("initAbsoluteURLWithDataRepresentation:relativeToURL:");
@@ -19659,6 +27315,8 @@
objc.registerName("initFileURLWithPath:isDirectory:relativeToURL:");
late final _sel_initFileURLWithPath_relativeToURL_ =
objc.registerName("initFileURLWithPath:relativeToURL:");
+late final _sel_initForKeyPath_ofObject_withBlock_ =
+ objc.registerName("initForKeyPath:ofObject:withBlock:");
late final _sel_initToBuffer_capacity_ =
objc.registerName("initToBuffer:capacity:");
late final _sel_initToFileAtPath_append_ =
@@ -19676,6 +27334,10 @@
late final _sel_initWithBool_ = objc.registerName("initWithBool:");
late final _sel_initWithBytesNoCopy_length_ =
objc.registerName("initWithBytesNoCopy:length:");
+late final _sel_initWithBytesNoCopy_length_deallocator_ =
+ objc.registerName("initWithBytesNoCopy:length:deallocator:");
+late final _sel_initWithBytesNoCopy_length_encoding_deallocator_ =
+ objc.registerName("initWithBytesNoCopy:length:encoding:deallocator:");
late final _sel_initWithBytesNoCopy_length_encoding_freeWhenDone_ =
objc.registerName("initWithBytesNoCopy:length:encoding:freeWhenDone:");
late final _sel_initWithBytesNoCopy_length_freeWhenDone_ =
@@ -19691,6 +27353,8 @@
late final _sel_initWithCapacity_ = objc.registerName("initWithCapacity:");
late final _sel_initWithChanges_ = objc.registerName("initWithChanges:");
late final _sel_initWithChar_ = objc.registerName("initWithChar:");
+late final _sel_initWithCharactersNoCopy_length_deallocator_ =
+ objc.registerName("initWithCharactersNoCopy:length:deallocator:");
late final _sel_initWithCharactersNoCopy_length_freeWhenDone_ =
objc.registerName("initWithCharactersNoCopy:length:freeWhenDone:");
late final _sel_initWithCharacters_length_ =
@@ -19725,6 +27389,8 @@
objc.registerName("initWithDomain:code:userInfo:");
late final _sel_initWithDouble_ = objc.registerName("initWithDouble:");
late final _sel_initWithFileAtPath_ = objc.registerName("initWithFileAtPath:");
+late final _sel_initWithFireDate_interval_repeats_block_ =
+ objc.registerName("initWithFireDate:interval:repeats:block:");
late final _sel_initWithFireDate_interval_target_selector_userInfo_repeats_ =
objc.registerName(
"initWithFireDate:interval:target:selector:userInfo:repeats:");
@@ -19873,8 +27539,16 @@
objc.registerName(
"itemProviderVisibilityForRepresentationWithTypeIdentifier:");
late final _sel_keyEnumerator = objc.registerName("keyEnumerator");
+late final _sel_keysOfEntriesPassingTest_ =
+ objc.registerName("keysOfEntriesPassingTest:");
+late final _sel_keysOfEntriesWithOptions_passingTest_ =
+ objc.registerName("keysOfEntriesWithOptions:passingTest:");
+late final _sel_keysSortedByValueUsingComparator_ =
+ objc.registerName("keysSortedByValueUsingComparator:");
late final _sel_keysSortedByValueUsingSelector_ =
objc.registerName("keysSortedByValueUsingSelector:");
+late final _sel_keysSortedByValueWithOptions_usingComparator_ =
+ objc.registerName("keysSortedByValueWithOptions:usingComparator:");
late final _sel_lastIndex = objc.registerName("lastIndex");
late final _sel_lastObject = objc.registerName("lastObject");
late final _sel_laterDate_ = objc.registerName("laterDate:");
@@ -19885,8 +27559,22 @@
late final _sel_limitDateForMode_ = objc.registerName("limitDateForMode:");
late final _sel_lineRangeForRange_ = objc.registerName("lineRangeForRange:");
late final _sel_load = objc.registerName("load");
+late final _sel_loadDataRepresentationForTypeIdentifier_completionHandler_ =
+ objc.registerName(
+ "loadDataRepresentationForTypeIdentifier:completionHandler:");
+late final _sel_loadDataWithTypeIdentifier_forItemProviderCompletionHandler_ =
+ objc.registerName(
+ "loadDataWithTypeIdentifier:forItemProviderCompletionHandler:");
+late final _sel_loadFileRepresentationForTypeIdentifier_completionHandler_ =
+ objc.registerName(
+ "loadFileRepresentationForTypeIdentifier:completionHandler:");
+late final _sel_loadInPlaceFileRepresentationForTypeIdentifier_completionHandler_ =
+ objc.registerName(
+ "loadInPlaceFileRepresentationForTypeIdentifier:completionHandler:");
late final _sel_loadItemForTypeIdentifier_options_completionHandler_ =
objc.registerName("loadItemForTypeIdentifier:options:completionHandler:");
+late final _sel_loadObjectOfClass_completionHandler_ =
+ objc.registerName("loadObjectOfClass:completionHandler:");
late final _sel_localeWithLocaleIdentifier_ =
objc.registerName("localeWithLocaleIdentifier:");
late final _sel_localizedCapitalizedString =
@@ -19998,6 +27686,11 @@
late final _sel_objectsAtIndexes_ = objc.registerName("objectsAtIndexes:");
late final _sel_objectsForKeys_notFoundMarker_ =
objc.registerName("objectsForKeys:notFoundMarker:");
+late final _sel_objectsPassingTest_ = objc.registerName("objectsPassingTest:");
+late final _sel_objectsWithOptions_passingTest_ =
+ objc.registerName("objectsWithOptions:passingTest:");
+late final _sel_observeValueForKeyPath_ofObject_change_context_ =
+ objc.registerName("observeValueForKeyPath:ofObject:change:context:");
late final _sel_open = objc.registerName("open");
late final _sel_orderedSet = objc.registerName("orderedSet");
late final _sel_orderedSetWithArray_ =
@@ -20069,6 +27762,16 @@
late final _sel_receivePort = objc.registerName("receivePort");
late final _sel_recoveryAttempter = objc.registerName("recoveryAttempter");
late final _sel_registerClass = objc.registerName("registerClass");
+late final _sel_registerDataRepresentationForTypeIdentifier_visibility_loadHandler_ =
+ objc.registerName(
+ "registerDataRepresentationForTypeIdentifier:visibility:loadHandler:");
+late final _sel_registerFileRepresentationForTypeIdentifier_fileOptions_visibility_loadHandler_ =
+ objc.registerName(
+ "registerFileRepresentationForTypeIdentifier:fileOptions:visibility:loadHandler:");
+late final _sel_registerItemForTypeIdentifier_loadHandler_ =
+ objc.registerName("registerItemForTypeIdentifier:loadHandler:");
+late final _sel_registerObjectOfClass_visibility_loadHandler_ =
+ objc.registerName("registerObjectOfClass:visibility:loadHandler:");
late final _sel_registerObject_visibility_ =
objc.registerName("registerObject:visibility:");
late final _sel_registeredTypeIdentifiers =
@@ -20079,6 +27782,7 @@
late final _sel_relativeString = objc.registerName("relativeString");
late final _sel_release = objc.registerName("release");
late final _sel_removals = objc.registerName("removals");
+late final _sel_remove = objc.registerName("remove");
late final _sel_removeAllCachedResourceValues =
objc.registerName("removeAllCachedResourceValues");
late final _sel_removeAllIndexes = objc.registerName("removeAllIndexes");
@@ -20148,6 +27852,8 @@
objc.registerName("scheduleInRunLoop:forMode:");
late final _sel_scheduledTimerWithTimeInterval_invocation_repeats_ =
objc.registerName("scheduledTimerWithTimeInterval:invocation:repeats:");
+late final _sel_scheduledTimerWithTimeInterval_repeats_block_ =
+ objc.registerName("scheduledTimerWithTimeInterval:repeats:block:");
late final _sel_scheduledTimerWithTimeInterval_target_selector_userInfo_repeats_ =
objc.registerName(
"scheduledTimerWithTimeInterval:target:selector:userInfo:repeats:");
@@ -20196,6 +27902,8 @@
late final _sel_setTemporaryResourceValue_forKey_ =
objc.registerName("setTemporaryResourceValue:forKey:");
late final _sel_setTolerance_ = objc.registerName("setTolerance:");
+late final _sel_setUserInfoValueProviderForDomain_provider_ =
+ objc.registerName("setUserInfoValueProviderForDomain:provider:");
late final _sel_setWithArray_ = objc.registerName("setWithArray:");
late final _sel_setWithCapacity_ = objc.registerName("setWithCapacity:");
late final _sel_setWithObject_ = objc.registerName("setWithObject:");
@@ -20209,16 +27917,26 @@
late final _sel_signatureWithObjCTypes_ =
objc.registerName("signatureWithObjCTypes:");
late final _sel_smallestEncoding = objc.registerName("smallestEncoding");
+late final _sel_sortRange_options_usingComparator_ =
+ objc.registerName("sortRange:options:usingComparator:");
+late final _sel_sortUsingComparator_ =
+ objc.registerName("sortUsingComparator:");
late final _sel_sortUsingFunction_context_ =
objc.registerName("sortUsingFunction:context:");
late final _sel_sortUsingSelector_ = objc.registerName("sortUsingSelector:");
+late final _sel_sortWithOptions_usingComparator_ =
+ objc.registerName("sortWithOptions:usingComparator:");
late final _sel_sortedArrayHint = objc.registerName("sortedArrayHint");
+late final _sel_sortedArrayUsingComparator_ =
+ objc.registerName("sortedArrayUsingComparator:");
late final _sel_sortedArrayUsingFunction_context_ =
objc.registerName("sortedArrayUsingFunction:context:");
late final _sel_sortedArrayUsingFunction_context_hint_ =
objc.registerName("sortedArrayUsingFunction:context:hint:");
late final _sel_sortedArrayUsingSelector_ =
objc.registerName("sortedArrayUsingSelector:");
+late final _sel_sortedArrayWithOptions_usingComparator_ =
+ objc.registerName("sortedArrayWithOptions:usingComparator:");
late final _sel_standardizedURL = objc.registerName("standardizedURL");
late final _sel_startAccessingSecurityScopedResource =
objc.registerName("startAccessingSecurityScopedResource");
@@ -20288,6 +28006,8 @@
objc.registerName("timeIntervalSinceReferenceDate");
late final _sel_timerWithTimeInterval_invocation_repeats_ =
objc.registerName("timerWithTimeInterval:invocation:repeats:");
+late final _sel_timerWithTimeInterval_repeats_block_ =
+ objc.registerName("timerWithTimeInterval:repeats:block:");
late final _sel_timerWithTimeInterval_target_selector_userInfo_repeats_ = objc
.registerName("timerWithTimeInterval:target:selector:userInfo:repeats:");
late final _sel_tolerance = objc.registerName("tolerance");
@@ -20309,6 +28029,8 @@
objc.registerName("uppercaseStringWithLocale:");
late final _sel_user = objc.registerName("user");
late final _sel_userInfo = objc.registerName("userInfo");
+late final _sel_userInfoValueProviderForDomain_ =
+ objc.registerName("userInfoValueProviderForDomain:");
late final _sel_versionForClassName_ =
objc.registerName("versionForClassName:");
late final _sel_whitespaceAndNewlineCharacterSet =
@@ -20336,74 +28058,3 @@
late final _sel_zone = objc.registerName("zone");
typedef instancetype = ffi.Pointer<objc.ObjCObject>;
typedef Dartinstancetype = objc.ObjCObjectBase;
-
-class _NSArrayIterator implements Iterator<objc.ObjCObjectBase> {
- final Iterable<objc.ObjCObjectBase> _iterable;
- final int _length;
- int _index;
- objc.ObjCObjectBase? _current;
-
- _NSArrayIterator(Iterable<objc.ObjCObjectBase> iterable)
- : _iterable = iterable,
- _length = iterable.length,
- _index = 0;
-
- @override
- objc.ObjCObjectBase get current => _current!;
-
- @override
- @pragma('vm:prefer-inline')
- bool moveNext() {
- final length = _iterable.length;
- if (_length != length) {
- throw ConcurrentModificationError(_iterable);
- }
- if (_index >= length) {
- _current = null;
- return false;
- }
- _current = _iterable.elementAt(_index);
- _index++;
- return true;
- }
-}
-
-class _NSDictionaryKeyIterable with Iterable<NSCopying> {
- NSDictionary _dictionary;
-
- _NSDictionaryKeyIterable(this._dictionary);
-
- @override
- int get length => _dictionary.length;
-
- @override
- Iterator<NSCopying> get iterator =>
- _NSDictionaryKeyIterator(_dictionary.keyEnumerator());
-
- @override
- bool contains(Object? key) => _dictionary.containsKey(key);
-}
-
-class _NSDictionaryValueIterable with Iterable<objc.ObjCObjectBase> {
- NSDictionary _dictionary;
-
- _NSDictionaryValueIterable(this._dictionary);
-
- @override
- int get length => _dictionary.length;
-
- @override
- Iterator<objc.ObjCObjectBase> get iterator => _dictionary.objectEnumerator();
-}
-
-class _NSDictionaryKeyIterator implements Iterator<NSCopying> {
- final Iterator<objc.ObjCObjectBase> _iterator;
- _NSDictionaryKeyIterator(this._iterator);
-
- @override
- NSCopying get current => NSCopying.castFrom(_iterator.current);
-
- @override
- @pragma('vm:prefer-inline')
- bool moveNext() => _iterator.moveNext();
-}
diff --git a/pkgs/objective_c/lib/src/observer.dart b/pkgs/objective_c/lib/src/observer.dart
new file mode 100644
index 0000000..ff0202b
--- /dev/null
+++ b/pkgs/objective_c/lib/src/observer.dart
@@ -0,0 +1,25 @@
+// Copyright (c) 2025, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+typedef Observer = void Function(
+ NSObject observed, ObjCObjectBase oldValue, ObjCObjectBase newValue);
+
+extension Observed on NSObject {
+ Observation addObserver(String key, DOBJCObserverBlock block) =>
+ Observation._(DOBJCObserver()
+ .initForKeyPath(key.toNSString(), ofObject: this, withBlock: block));
+
+ Observation addObserverListener(String key, Observer observer,
+ {bool keepIsolateAlive = false}) =>
+ addObserver(
+ key,
+ DOBJCObserverBlock.listener(observer,
+ keepIsolateAlive: keepIsolateAlive));
+}
+
+class Observation {
+ DOBJCObserver _observer;
+ Observation._(this._observer);
+ void remove() => _observer.remove();
+}
diff --git a/pkgs/objective_c/macos/Classes/objective_c.m b/pkgs/objective_c/macos/Classes/objective_c.m
index 745ecab..b3ce4fb 100644
--- a/pkgs/objective_c/macos/Classes/objective_c.m
+++ b/pkgs/objective_c/macos/Classes/objective_c.m
@@ -7,4 +7,5 @@
#include "../../src/input_stream_adapter.m"
#include "../../src/objective_c.m"
#include "../../src/objective_c_bindings_generated.m"
+#include "../../src/observer.m"
#include "../../src/protocol.m"
diff --git a/pkgs/objective_c/src/objective_c_bindings_generated.m b/pkgs/objective_c/src/objective_c_bindings_generated.m
index c2d2d99..e4ead39 100644
--- a/pkgs/objective_c/src/objective_c_bindings_generated.m
+++ b/pkgs/objective_c/src/objective_c_bindings_generated.m
@@ -4,6 +4,7 @@
#import "foundation.h"
#import "input_stream_adapter.h"
#import "ns_number.h"
+#import "observer.h"
#import "protocol.h"
#if !__has_feature(objc_arc)
@@ -84,165 +85,107 @@
return ((ProtocolTrampoline_1)((id (*)(id, SEL, SEL))objc_msgSend)(target, @selector(getDOBJCDartProtocolMethodForSelector:), sel))(sel, arg1);
}
-typedef unsigned long (^ProtocolTrampoline_2)(void * sel);
+typedef id (^ProtocolTrampoline_2)(void * sel, id arg1, id arg2);
+__attribute__((visibility("default"))) __attribute__((used))
+id _ObjectiveCBindings_protocolTrampoline_1q0i84(id target, void * sel, id arg1, id arg2) {
+ return ((ProtocolTrampoline_2)((id (*)(id, SEL, SEL))objc_msgSend)(target, @selector(getDOBJCDartProtocolMethodForSelector:), sel))(sel, arg1, arg2);
+}
+
+typedef unsigned long (^ProtocolTrampoline_3)(void * sel);
__attribute__((visibility("default"))) __attribute__((used))
unsigned long _ObjectiveCBindings_protocolTrampoline_1ckyi24(id target, void * sel) {
- return ((ProtocolTrampoline_2)((id (*)(id, SEL, SEL))objc_msgSend)(target, @selector(getDOBJCDartProtocolMethodForSelector:), sel))(sel);
+ return ((ProtocolTrampoline_3)((id (*)(id, SEL, SEL))objc_msgSend)(target, @selector(getDOBJCDartProtocolMethodForSelector:), sel))(sel);
}
-typedef unsigned long (^ProtocolTrampoline_3)(void * sel, NSFastEnumerationState * arg1, id * arg2, unsigned long arg3);
+typedef unsigned long (^ProtocolTrampoline_4)(void * sel, NSFastEnumerationState * arg1, id * arg2, unsigned long arg3);
__attribute__((visibility("default"))) __attribute__((used))
unsigned long _ObjectiveCBindings_protocolTrampoline_17ap02x(id target, void * sel, NSFastEnumerationState * arg1, id * arg2, unsigned long arg3) {
- return ((ProtocolTrampoline_3)((id (*)(id, SEL, SEL))objc_msgSend)(target, @selector(getDOBJCDartProtocolMethodForSelector:), sel))(sel, arg1, arg2, arg3);
+ return ((ProtocolTrampoline_4)((id (*)(id, SEL, SEL))objc_msgSend)(target, @selector(getDOBJCDartProtocolMethodForSelector:), sel))(sel, arg1, arg2, arg3);
}
-typedef struct _NSZone * (^ProtocolTrampoline_4)(void * sel);
+typedef struct _NSZone * (^ProtocolTrampoline_5)(void * sel);
__attribute__((visibility("default"))) __attribute__((used))
struct _NSZone * _ObjectiveCBindings_protocolTrampoline_1a8cl66(id target, void * sel) {
- return ((ProtocolTrampoline_4)((id (*)(id, SEL, SEL))objc_msgSend)(target, @selector(getDOBJCDartProtocolMethodForSelector:), sel))(sel);
-}
-
-typedef BOOL (^ProtocolTrampoline_5)(void * sel);
-__attribute__((visibility("default"))) __attribute__((used))
-BOOL _ObjectiveCBindings_protocolTrampoline_e3qsqz(id target, void * sel) {
return ((ProtocolTrampoline_5)((id (*)(id, SEL, SEL))objc_msgSend)(target, @selector(getDOBJCDartProtocolMethodForSelector:), sel))(sel);
}
-typedef BOOL (^ProtocolTrampoline_6)(void * sel, id arg1);
+typedef BOOL (^ProtocolTrampoline_6)(void * sel);
__attribute__((visibility("default"))) __attribute__((used))
-BOOL _ObjectiveCBindings_protocolTrampoline_3su7tt(id target, void * sel, id arg1) {
- return ((ProtocolTrampoline_6)((id (*)(id, SEL, SEL))objc_msgSend)(target, @selector(getDOBJCDartProtocolMethodForSelector:), sel))(sel, arg1);
+BOOL _ObjectiveCBindings_protocolTrampoline_e3qsqz(id target, void * sel) {
+ return ((ProtocolTrampoline_6)((id (*)(id, SEL, SEL))objc_msgSend)(target, @selector(getDOBJCDartProtocolMethodForSelector:), sel))(sel);
}
-typedef BOOL (^ProtocolTrampoline_7)(void * sel, struct objc_selector * arg1);
+typedef BOOL (^ProtocolTrampoline_7)(void * sel, id arg1);
__attribute__((visibility("default"))) __attribute__((used))
-BOOL _ObjectiveCBindings_protocolTrampoline_w1e3k0(id target, void * sel, struct objc_selector * arg1) {
+BOOL _ObjectiveCBindings_protocolTrampoline_3su7tt(id target, void * sel, id arg1) {
return ((ProtocolTrampoline_7)((id (*)(id, SEL, SEL))objc_msgSend)(target, @selector(getDOBJCDartProtocolMethodForSelector:), sel))(sel, arg1);
}
-typedef void (^ListenerTrampoline)(id arg0, id arg1, id arg2);
+typedef BOOL (^ProtocolTrampoline_8)(void * sel, struct objc_selector * arg1);
__attribute__((visibility("default"))) __attribute__((used))
-ListenerTrampoline _ObjectiveCBindings_wrapListenerBlock_1b3bb6a(ListenerTrampoline block) NS_RETURNS_RETAINED {
- return ^void(id arg0, id arg1, id arg2) {
+BOOL _ObjectiveCBindings_protocolTrampoline_w1e3k0(id target, void * sel, struct objc_selector * arg1) {
+ return ((ProtocolTrampoline_8)((id (*)(id, SEL, SEL))objc_msgSend)(target, @selector(getDOBJCDartProtocolMethodForSelector:), sel))(sel, arg1);
+}
+
+typedef void (^ListenerTrampoline)();
+__attribute__((visibility("default"))) __attribute__((used))
+ListenerTrampoline _ObjectiveCBindings_wrapListenerBlock_1pl9qdv(ListenerTrampoline block) NS_RETURNS_RETAINED {
+ return ^void() {
objc_retainBlock(block);
- block(objc_retainBlock(arg0), (__bridge id)(__bridge_retained void*)(arg1), (__bridge id)(__bridge_retained void*)(arg2));
+ block();
};
}
-typedef void (^BlockingTrampoline)(void * waiter, id arg0, id arg1, id arg2);
+typedef void (^BlockingTrampoline)(void * waiter);
__attribute__((visibility("default"))) __attribute__((used))
-ListenerTrampoline _ObjectiveCBindings_wrapBlockingBlock_1b3bb6a(
+ListenerTrampoline _ObjectiveCBindings_wrapBlockingBlock_1pl9qdv(
BlockingTrampoline block, BlockingTrampoline listenerBlock,
DOBJC_Context* ctx) NS_RETURNS_RETAINED {
- BLOCKING_BLOCK_IMPL(ctx, ^void(id arg0, id arg1, id arg2), {
+ BLOCKING_BLOCK_IMPL(ctx, ^void(), {
objc_retainBlock(block);
- block(nil, objc_retainBlock(arg0), (__bridge id)(__bridge_retained void*)(arg1), (__bridge id)(__bridge_retained void*)(arg2));
+ block(nil);
}, {
objc_retainBlock(listenerBlock);
- listenerBlock(waiter, objc_retainBlock(arg0), (__bridge id)(__bridge_retained void*)(arg1), (__bridge id)(__bridge_retained void*)(arg2));
+ listenerBlock(waiter);
});
}
-typedef void (^ListenerTrampoline_1)(void * arg0);
+typedef void (^ListenerTrampoline_1)(id arg0, id arg1, BOOL * arg2);
__attribute__((visibility("default"))) __attribute__((used))
-ListenerTrampoline_1 _ObjectiveCBindings_wrapListenerBlock_ovsamd(ListenerTrampoline_1 block) NS_RETURNS_RETAINED {
- return ^void(void * arg0) {
+ListenerTrampoline_1 _ObjectiveCBindings_wrapListenerBlock_1o83rbn(ListenerTrampoline_1 block) NS_RETURNS_RETAINED {
+ return ^void(id arg0, id arg1, BOOL * arg2) {
objc_retainBlock(block);
- block(arg0);
+ block((__bridge id)(__bridge_retained void*)(arg0), (__bridge id)(__bridge_retained void*)(arg1), arg2);
};
}
-typedef void (^BlockingTrampoline_1)(void * waiter, void * arg0);
+typedef void (^BlockingTrampoline_1)(void * waiter, id arg0, id arg1, BOOL * arg2);
__attribute__((visibility("default"))) __attribute__((used))
-ListenerTrampoline_1 _ObjectiveCBindings_wrapBlockingBlock_ovsamd(
+ListenerTrampoline_1 _ObjectiveCBindings_wrapBlockingBlock_1o83rbn(
BlockingTrampoline_1 block, BlockingTrampoline_1 listenerBlock,
DOBJC_Context* ctx) NS_RETURNS_RETAINED {
- BLOCKING_BLOCK_IMPL(ctx, ^void(void * arg0), {
+ BLOCKING_BLOCK_IMPL(ctx, ^void(id arg0, id arg1, BOOL * arg2), {
objc_retainBlock(block);
- block(nil, arg0);
+ block(nil, (__bridge id)(__bridge_retained void*)(arg0), (__bridge id)(__bridge_retained void*)(arg1), arg2);
}, {
objc_retainBlock(listenerBlock);
- listenerBlock(waiter, arg0);
+ listenerBlock(waiter, (__bridge id)(__bridge_retained void*)(arg0), (__bridge id)(__bridge_retained void*)(arg1), arg2);
});
}
-typedef void (^ProtocolTrampoline_8)(void * sel);
+typedef void (^ListenerTrampoline_2)(id arg0, id arg1);
__attribute__((visibility("default"))) __attribute__((used))
-void _ObjectiveCBindings_protocolTrampoline_ovsamd(id target, void * sel) {
- return ((ProtocolTrampoline_8)((id (*)(id, SEL, SEL))objc_msgSend)(target, @selector(getDOBJCDartProtocolMethodForSelector:), sel))(sel);
-}
-
-typedef void (^ListenerTrampoline_2)(void * arg0, id arg1);
-__attribute__((visibility("default"))) __attribute__((used))
-ListenerTrampoline_2 _ObjectiveCBindings_wrapListenerBlock_18v1jvf(ListenerTrampoline_2 block) NS_RETURNS_RETAINED {
- return ^void(void * arg0, id arg1) {
- objc_retainBlock(block);
- block(arg0, (__bridge id)(__bridge_retained void*)(arg1));
- };
-}
-
-typedef void (^BlockingTrampoline_2)(void * waiter, void * arg0, id arg1);
-__attribute__((visibility("default"))) __attribute__((used))
-ListenerTrampoline_2 _ObjectiveCBindings_wrapBlockingBlock_18v1jvf(
- BlockingTrampoline_2 block, BlockingTrampoline_2 listenerBlock,
- DOBJC_Context* ctx) NS_RETURNS_RETAINED {
- BLOCKING_BLOCK_IMPL(ctx, ^void(void * arg0, id arg1), {
- objc_retainBlock(block);
- block(nil, arg0, (__bridge id)(__bridge_retained void*)(arg1));
- }, {
- objc_retainBlock(listenerBlock);
- listenerBlock(waiter, arg0, (__bridge id)(__bridge_retained void*)(arg1));
- });
-}
-
-typedef void (^ProtocolTrampoline_9)(void * sel, id arg1);
-__attribute__((visibility("default"))) __attribute__((used))
-void _ObjectiveCBindings_protocolTrampoline_18v1jvf(id target, void * sel, id arg1) {
- return ((ProtocolTrampoline_9)((id (*)(id, SEL, SEL))objc_msgSend)(target, @selector(getDOBJCDartProtocolMethodForSelector:), sel))(sel, arg1);
-}
-
-typedef void (^ListenerTrampoline_3)(void * arg0, id arg1, NSStreamEvent arg2);
-__attribute__((visibility("default"))) __attribute__((used))
-ListenerTrampoline_3 _ObjectiveCBindings_wrapListenerBlock_hoampi(ListenerTrampoline_3 block) NS_RETURNS_RETAINED {
- return ^void(void * arg0, id arg1, NSStreamEvent arg2) {
- objc_retainBlock(block);
- block(arg0, (__bridge id)(__bridge_retained void*)(arg1), arg2);
- };
-}
-
-typedef void (^BlockingTrampoline_3)(void * waiter, void * arg0, id arg1, NSStreamEvent arg2);
-__attribute__((visibility("default"))) __attribute__((used))
-ListenerTrampoline_3 _ObjectiveCBindings_wrapBlockingBlock_hoampi(
- BlockingTrampoline_3 block, BlockingTrampoline_3 listenerBlock,
- DOBJC_Context* ctx) NS_RETURNS_RETAINED {
- BLOCKING_BLOCK_IMPL(ctx, ^void(void * arg0, id arg1, NSStreamEvent arg2), {
- objc_retainBlock(block);
- block(nil, arg0, (__bridge id)(__bridge_retained void*)(arg1), arg2);
- }, {
- objc_retainBlock(listenerBlock);
- listenerBlock(waiter, arg0, (__bridge id)(__bridge_retained void*)(arg1), arg2);
- });
-}
-
-typedef void (^ProtocolTrampoline_10)(void * sel, id arg1, NSStreamEvent arg2);
-__attribute__((visibility("default"))) __attribute__((used))
-void _ObjectiveCBindings_protocolTrampoline_hoampi(id target, void * sel, id arg1, NSStreamEvent arg2) {
- return ((ProtocolTrampoline_10)((id (*)(id, SEL, SEL))objc_msgSend)(target, @selector(getDOBJCDartProtocolMethodForSelector:), sel))(sel, arg1, arg2);
-}
-
-typedef void (^ListenerTrampoline_4)(id arg0, id arg1);
-__attribute__((visibility("default"))) __attribute__((used))
-ListenerTrampoline_4 _ObjectiveCBindings_wrapListenerBlock_pfv6jd(ListenerTrampoline_4 block) NS_RETURNS_RETAINED {
+ListenerTrampoline_2 _ObjectiveCBindings_wrapListenerBlock_pfv6jd(ListenerTrampoline_2 block) NS_RETURNS_RETAINED {
return ^void(id arg0, id arg1) {
objc_retainBlock(block);
block((__bridge id)(__bridge_retained void*)(arg0), (__bridge id)(__bridge_retained void*)(arg1));
};
}
-typedef void (^BlockingTrampoline_4)(void * waiter, id arg0, id arg1);
+typedef void (^BlockingTrampoline_2)(void * waiter, id arg0, id arg1);
__attribute__((visibility("default"))) __attribute__((used))
-ListenerTrampoline_4 _ObjectiveCBindings_wrapBlockingBlock_pfv6jd(
- BlockingTrampoline_4 block, BlockingTrampoline_4 listenerBlock,
+ListenerTrampoline_2 _ObjectiveCBindings_wrapBlockingBlock_pfv6jd(
+ BlockingTrampoline_2 block, BlockingTrampoline_2 listenerBlock,
DOBJC_Context* ctx) NS_RETURNS_RETAINED {
BLOCKING_BLOCK_IMPL(ctx, ^void(id arg0, id arg1), {
objc_retainBlock(block);
@@ -253,40 +196,403 @@
});
}
-typedef id (^ProtocolTrampoline_11)(void * sel, id arg1);
+typedef void (^ListenerTrampoline_3)(id arg0, id arg1, id arg2);
+__attribute__((visibility("default"))) __attribute__((used))
+ListenerTrampoline_3 _ObjectiveCBindings_wrapListenerBlock_1b3bb6a(ListenerTrampoline_3 block) NS_RETURNS_RETAINED {
+ return ^void(id arg0, id arg1, id arg2) {
+ objc_retainBlock(block);
+ block(objc_retainBlock(arg0), (__bridge id)(__bridge_retained void*)(arg1), (__bridge id)(__bridge_retained void*)(arg2));
+ };
+}
+
+typedef void (^BlockingTrampoline_3)(void * waiter, id arg0, id arg1, id arg2);
+__attribute__((visibility("default"))) __attribute__((used))
+ListenerTrampoline_3 _ObjectiveCBindings_wrapBlockingBlock_1b3bb6a(
+ BlockingTrampoline_3 block, BlockingTrampoline_3 listenerBlock,
+ DOBJC_Context* ctx) NS_RETURNS_RETAINED {
+ BLOCKING_BLOCK_IMPL(ctx, ^void(id arg0, id arg1, id arg2), {
+ objc_retainBlock(block);
+ block(nil, objc_retainBlock(arg0), (__bridge id)(__bridge_retained void*)(arg1), (__bridge id)(__bridge_retained void*)(arg2));
+ }, {
+ objc_retainBlock(listenerBlock);
+ listenerBlock(waiter, objc_retainBlock(arg0), (__bridge id)(__bridge_retained void*)(arg1), (__bridge id)(__bridge_retained void*)(arg2));
+ });
+}
+
+typedef void (^ListenerTrampoline_4)(id arg0, id arg1, id arg2);
+__attribute__((visibility("default"))) __attribute__((used))
+ListenerTrampoline_4 _ObjectiveCBindings_wrapListenerBlock_r8gdi7(ListenerTrampoline_4 block) NS_RETURNS_RETAINED {
+ return ^void(id arg0, id arg1, id arg2) {
+ objc_retainBlock(block);
+ block((__bridge id)(__bridge_retained void*)(arg0), (__bridge id)(__bridge_retained void*)(arg1), (__bridge id)(__bridge_retained void*)(arg2));
+ };
+}
+
+typedef void (^BlockingTrampoline_4)(void * waiter, id arg0, id arg1, id arg2);
+__attribute__((visibility("default"))) __attribute__((used))
+ListenerTrampoline_4 _ObjectiveCBindings_wrapBlockingBlock_r8gdi7(
+ BlockingTrampoline_4 block, BlockingTrampoline_4 listenerBlock,
+ DOBJC_Context* ctx) NS_RETURNS_RETAINED {
+ BLOCKING_BLOCK_IMPL(ctx, ^void(id arg0, id arg1, id arg2), {
+ objc_retainBlock(block);
+ block(nil, (__bridge id)(__bridge_retained void*)(arg0), (__bridge id)(__bridge_retained void*)(arg1), (__bridge id)(__bridge_retained void*)(arg2));
+ }, {
+ objc_retainBlock(listenerBlock);
+ listenerBlock(waiter, (__bridge id)(__bridge_retained void*)(arg0), (__bridge id)(__bridge_retained void*)(arg1), (__bridge id)(__bridge_retained void*)(arg2));
+ });
+}
+
+typedef void (^ListenerTrampoline_5)(struct _NSRange arg0, BOOL * arg1);
+__attribute__((visibility("default"))) __attribute__((used))
+ListenerTrampoline_5 _ObjectiveCBindings_wrapListenerBlock_zkjmn1(ListenerTrampoline_5 block) NS_RETURNS_RETAINED {
+ return ^void(struct _NSRange arg0, BOOL * arg1) {
+ objc_retainBlock(block);
+ block(arg0, arg1);
+ };
+}
+
+typedef void (^BlockingTrampoline_5)(void * waiter, struct _NSRange arg0, BOOL * arg1);
+__attribute__((visibility("default"))) __attribute__((used))
+ListenerTrampoline_5 _ObjectiveCBindings_wrapBlockingBlock_zkjmn1(
+ BlockingTrampoline_5 block, BlockingTrampoline_5 listenerBlock,
+ DOBJC_Context* ctx) NS_RETURNS_RETAINED {
+ BLOCKING_BLOCK_IMPL(ctx, ^void(struct _NSRange arg0, BOOL * arg1), {
+ objc_retainBlock(block);
+ block(nil, arg0, arg1);
+ }, {
+ objc_retainBlock(listenerBlock);
+ listenerBlock(waiter, arg0, arg1);
+ });
+}
+
+typedef void (^ListenerTrampoline_6)(id arg0, struct _NSRange arg1, struct _NSRange arg2, BOOL * arg3);
+__attribute__((visibility("default"))) __attribute__((used))
+ListenerTrampoline_6 _ObjectiveCBindings_wrapListenerBlock_lmc3p5(ListenerTrampoline_6 block) NS_RETURNS_RETAINED {
+ return ^void(id arg0, struct _NSRange arg1, struct _NSRange arg2, BOOL * arg3) {
+ objc_retainBlock(block);
+ block((__bridge id)(__bridge_retained void*)(arg0), arg1, arg2, arg3);
+ };
+}
+
+typedef void (^BlockingTrampoline_6)(void * waiter, id arg0, struct _NSRange arg1, struct _NSRange arg2, BOOL * arg3);
+__attribute__((visibility("default"))) __attribute__((used))
+ListenerTrampoline_6 _ObjectiveCBindings_wrapBlockingBlock_lmc3p5(
+ BlockingTrampoline_6 block, BlockingTrampoline_6 listenerBlock,
+ DOBJC_Context* ctx) NS_RETURNS_RETAINED {
+ BLOCKING_BLOCK_IMPL(ctx, ^void(id arg0, struct _NSRange arg1, struct _NSRange arg2, BOOL * arg3), {
+ objc_retainBlock(block);
+ block(nil, (__bridge id)(__bridge_retained void*)(arg0), arg1, arg2, arg3);
+ }, {
+ objc_retainBlock(listenerBlock);
+ listenerBlock(waiter, (__bridge id)(__bridge_retained void*)(arg0), arg1, arg2, arg3);
+ });
+}
+
+typedef void (^ListenerTrampoline_7)(id arg0, BOOL * arg1);
+__attribute__((visibility("default"))) __attribute__((used))
+ListenerTrampoline_7 _ObjectiveCBindings_wrapListenerBlock_t8l8el(ListenerTrampoline_7 block) NS_RETURNS_RETAINED {
+ return ^void(id arg0, BOOL * arg1) {
+ objc_retainBlock(block);
+ block((__bridge id)(__bridge_retained void*)(arg0), arg1);
+ };
+}
+
+typedef void (^BlockingTrampoline_7)(void * waiter, id arg0, BOOL * arg1);
+__attribute__((visibility("default"))) __attribute__((used))
+ListenerTrampoline_7 _ObjectiveCBindings_wrapBlockingBlock_t8l8el(
+ BlockingTrampoline_7 block, BlockingTrampoline_7 listenerBlock,
+ DOBJC_Context* ctx) NS_RETURNS_RETAINED {
+ BLOCKING_BLOCK_IMPL(ctx, ^void(id arg0, BOOL * arg1), {
+ objc_retainBlock(block);
+ block(nil, (__bridge id)(__bridge_retained void*)(arg0), arg1);
+ }, {
+ objc_retainBlock(listenerBlock);
+ listenerBlock(waiter, (__bridge id)(__bridge_retained void*)(arg0), arg1);
+ });
+}
+
+typedef void (^ListenerTrampoline_8)(id arg0);
+__attribute__((visibility("default"))) __attribute__((used))
+ListenerTrampoline_8 _ObjectiveCBindings_wrapListenerBlock_xtuoz7(ListenerTrampoline_8 block) NS_RETURNS_RETAINED {
+ return ^void(id arg0) {
+ objc_retainBlock(block);
+ block((__bridge id)(__bridge_retained void*)(arg0));
+ };
+}
+
+typedef void (^BlockingTrampoline_8)(void * waiter, id arg0);
+__attribute__((visibility("default"))) __attribute__((used))
+ListenerTrampoline_8 _ObjectiveCBindings_wrapBlockingBlock_xtuoz7(
+ BlockingTrampoline_8 block, BlockingTrampoline_8 listenerBlock,
+ DOBJC_Context* ctx) NS_RETURNS_RETAINED {
+ BLOCKING_BLOCK_IMPL(ctx, ^void(id arg0), {
+ objc_retainBlock(block);
+ block(nil, (__bridge id)(__bridge_retained void*)(arg0));
+ }, {
+ objc_retainBlock(listenerBlock);
+ listenerBlock(waiter, (__bridge id)(__bridge_retained void*)(arg0));
+ });
+}
+
+typedef void (^ListenerTrampoline_9)(unsigned long arg0, BOOL * arg1);
+__attribute__((visibility("default"))) __attribute__((used))
+ListenerTrampoline_9 _ObjectiveCBindings_wrapListenerBlock_q5jeyk(ListenerTrampoline_9 block) NS_RETURNS_RETAINED {
+ return ^void(unsigned long arg0, BOOL * arg1) {
+ objc_retainBlock(block);
+ block(arg0, arg1);
+ };
+}
+
+typedef void (^BlockingTrampoline_9)(void * waiter, unsigned long arg0, BOOL * arg1);
+__attribute__((visibility("default"))) __attribute__((used))
+ListenerTrampoline_9 _ObjectiveCBindings_wrapBlockingBlock_q5jeyk(
+ BlockingTrampoline_9 block, BlockingTrampoline_9 listenerBlock,
+ DOBJC_Context* ctx) NS_RETURNS_RETAINED {
+ BLOCKING_BLOCK_IMPL(ctx, ^void(unsigned long arg0, BOOL * arg1), {
+ objc_retainBlock(block);
+ block(nil, arg0, arg1);
+ }, {
+ objc_retainBlock(listenerBlock);
+ listenerBlock(waiter, arg0, arg1);
+ });
+}
+
+typedef void (^ListenerTrampoline_10)(id arg0, BOOL arg1, id arg2);
+__attribute__((visibility("default"))) __attribute__((used))
+ListenerTrampoline_10 _ObjectiveCBindings_wrapListenerBlock_rnu2c5(ListenerTrampoline_10 block) NS_RETURNS_RETAINED {
+ return ^void(id arg0, BOOL arg1, id arg2) {
+ objc_retainBlock(block);
+ block((__bridge id)(__bridge_retained void*)(arg0), arg1, (__bridge id)(__bridge_retained void*)(arg2));
+ };
+}
+
+typedef void (^BlockingTrampoline_10)(void * waiter, id arg0, BOOL arg1, id arg2);
+__attribute__((visibility("default"))) __attribute__((used))
+ListenerTrampoline_10 _ObjectiveCBindings_wrapBlockingBlock_rnu2c5(
+ BlockingTrampoline_10 block, BlockingTrampoline_10 listenerBlock,
+ DOBJC_Context* ctx) NS_RETURNS_RETAINED {
+ BLOCKING_BLOCK_IMPL(ctx, ^void(id arg0, BOOL arg1, id arg2), {
+ objc_retainBlock(block);
+ block(nil, (__bridge id)(__bridge_retained void*)(arg0), arg1, (__bridge id)(__bridge_retained void*)(arg2));
+ }, {
+ objc_retainBlock(listenerBlock);
+ listenerBlock(waiter, (__bridge id)(__bridge_retained void*)(arg0), arg1, (__bridge id)(__bridge_retained void*)(arg2));
+ });
+}
+
+typedef void (^ListenerTrampoline_11)(id arg0, unsigned long arg1, BOOL * arg2);
+__attribute__((visibility("default"))) __attribute__((used))
+ListenerTrampoline_11 _ObjectiveCBindings_wrapListenerBlock_1p9ui4q(ListenerTrampoline_11 block) NS_RETURNS_RETAINED {
+ return ^void(id arg0, unsigned long arg1, BOOL * arg2) {
+ objc_retainBlock(block);
+ block((__bridge id)(__bridge_retained void*)(arg0), arg1, arg2);
+ };
+}
+
+typedef void (^BlockingTrampoline_11)(void * waiter, id arg0, unsigned long arg1, BOOL * arg2);
+__attribute__((visibility("default"))) __attribute__((used))
+ListenerTrampoline_11 _ObjectiveCBindings_wrapBlockingBlock_1p9ui4q(
+ BlockingTrampoline_11 block, BlockingTrampoline_11 listenerBlock,
+ DOBJC_Context* ctx) NS_RETURNS_RETAINED {
+ BLOCKING_BLOCK_IMPL(ctx, ^void(id arg0, unsigned long arg1, BOOL * arg2), {
+ objc_retainBlock(block);
+ block(nil, (__bridge id)(__bridge_retained void*)(arg0), arg1, arg2);
+ }, {
+ objc_retainBlock(listenerBlock);
+ listenerBlock(waiter, (__bridge id)(__bridge_retained void*)(arg0), arg1, arg2);
+ });
+}
+
+typedef void (^ListenerTrampoline_12)(void * arg0);
+__attribute__((visibility("default"))) __attribute__((used))
+ListenerTrampoline_12 _ObjectiveCBindings_wrapListenerBlock_ovsamd(ListenerTrampoline_12 block) NS_RETURNS_RETAINED {
+ return ^void(void * arg0) {
+ objc_retainBlock(block);
+ block(arg0);
+ };
+}
+
+typedef void (^BlockingTrampoline_12)(void * waiter, void * arg0);
+__attribute__((visibility("default"))) __attribute__((used))
+ListenerTrampoline_12 _ObjectiveCBindings_wrapBlockingBlock_ovsamd(
+ BlockingTrampoline_12 block, BlockingTrampoline_12 listenerBlock,
+ DOBJC_Context* ctx) NS_RETURNS_RETAINED {
+ BLOCKING_BLOCK_IMPL(ctx, ^void(void * arg0), {
+ objc_retainBlock(block);
+ block(nil, arg0);
+ }, {
+ objc_retainBlock(listenerBlock);
+ listenerBlock(waiter, arg0);
+ });
+}
+
+typedef void (^ProtocolTrampoline_9)(void * sel);
+__attribute__((visibility("default"))) __attribute__((used))
+void _ObjectiveCBindings_protocolTrampoline_ovsamd(id target, void * sel) {
+ return ((ProtocolTrampoline_9)((id (*)(id, SEL, SEL))objc_msgSend)(target, @selector(getDOBJCDartProtocolMethodForSelector:), sel))(sel);
+}
+
+typedef void (^ListenerTrampoline_13)(void * arg0, id arg1);
+__attribute__((visibility("default"))) __attribute__((used))
+ListenerTrampoline_13 _ObjectiveCBindings_wrapListenerBlock_18v1jvf(ListenerTrampoline_13 block) NS_RETURNS_RETAINED {
+ return ^void(void * arg0, id arg1) {
+ objc_retainBlock(block);
+ block(arg0, (__bridge id)(__bridge_retained void*)(arg1));
+ };
+}
+
+typedef void (^BlockingTrampoline_13)(void * waiter, void * arg0, id arg1);
+__attribute__((visibility("default"))) __attribute__((used))
+ListenerTrampoline_13 _ObjectiveCBindings_wrapBlockingBlock_18v1jvf(
+ BlockingTrampoline_13 block, BlockingTrampoline_13 listenerBlock,
+ DOBJC_Context* ctx) NS_RETURNS_RETAINED {
+ BLOCKING_BLOCK_IMPL(ctx, ^void(void * arg0, id arg1), {
+ objc_retainBlock(block);
+ block(nil, arg0, (__bridge id)(__bridge_retained void*)(arg1));
+ }, {
+ objc_retainBlock(listenerBlock);
+ listenerBlock(waiter, arg0, (__bridge id)(__bridge_retained void*)(arg1));
+ });
+}
+
+typedef void (^ProtocolTrampoline_10)(void * sel, id arg1);
+__attribute__((visibility("default"))) __attribute__((used))
+void _ObjectiveCBindings_protocolTrampoline_18v1jvf(id target, void * sel, id arg1) {
+ return ((ProtocolTrampoline_10)((id (*)(id, SEL, SEL))objc_msgSend)(target, @selector(getDOBJCDartProtocolMethodForSelector:), sel))(sel, arg1);
+}
+
+typedef void (^ListenerTrampoline_14)(void * arg0, struct _NSRange arg1, BOOL * arg2);
+__attribute__((visibility("default"))) __attribute__((used))
+ListenerTrampoline_14 _ObjectiveCBindings_wrapListenerBlock_1q8ia8l(ListenerTrampoline_14 block) NS_RETURNS_RETAINED {
+ return ^void(void * arg0, struct _NSRange arg1, BOOL * arg2) {
+ objc_retainBlock(block);
+ block(arg0, arg1, arg2);
+ };
+}
+
+typedef void (^BlockingTrampoline_14)(void * waiter, void * arg0, struct _NSRange arg1, BOOL * arg2);
+__attribute__((visibility("default"))) __attribute__((used))
+ListenerTrampoline_14 _ObjectiveCBindings_wrapBlockingBlock_1q8ia8l(
+ BlockingTrampoline_14 block, BlockingTrampoline_14 listenerBlock,
+ DOBJC_Context* ctx) NS_RETURNS_RETAINED {
+ BLOCKING_BLOCK_IMPL(ctx, ^void(void * arg0, struct _NSRange arg1, BOOL * arg2), {
+ objc_retainBlock(block);
+ block(nil, arg0, arg1, arg2);
+ }, {
+ objc_retainBlock(listenerBlock);
+ listenerBlock(waiter, arg0, arg1, arg2);
+ });
+}
+
+typedef void (^ListenerTrampoline_15)(void * arg0, id arg1, NSStreamEvent arg2);
+__attribute__((visibility("default"))) __attribute__((used))
+ListenerTrampoline_15 _ObjectiveCBindings_wrapListenerBlock_hoampi(ListenerTrampoline_15 block) NS_RETURNS_RETAINED {
+ return ^void(void * arg0, id arg1, NSStreamEvent arg2) {
+ objc_retainBlock(block);
+ block(arg0, (__bridge id)(__bridge_retained void*)(arg1), arg2);
+ };
+}
+
+typedef void (^BlockingTrampoline_15)(void * waiter, void * arg0, id arg1, NSStreamEvent arg2);
+__attribute__((visibility("default"))) __attribute__((used))
+ListenerTrampoline_15 _ObjectiveCBindings_wrapBlockingBlock_hoampi(
+ BlockingTrampoline_15 block, BlockingTrampoline_15 listenerBlock,
+ DOBJC_Context* ctx) NS_RETURNS_RETAINED {
+ BLOCKING_BLOCK_IMPL(ctx, ^void(void * arg0, id arg1, NSStreamEvent arg2), {
+ objc_retainBlock(block);
+ block(nil, arg0, (__bridge id)(__bridge_retained void*)(arg1), arg2);
+ }, {
+ objc_retainBlock(listenerBlock);
+ listenerBlock(waiter, arg0, (__bridge id)(__bridge_retained void*)(arg1), arg2);
+ });
+}
+
+typedef void (^ProtocolTrampoline_11)(void * sel, id arg1, NSStreamEvent arg2);
+__attribute__((visibility("default"))) __attribute__((used))
+void _ObjectiveCBindings_protocolTrampoline_hoampi(id target, void * sel, id arg1, NSStreamEvent arg2) {
+ return ((ProtocolTrampoline_11)((id (*)(id, SEL, SEL))objc_msgSend)(target, @selector(getDOBJCDartProtocolMethodForSelector:), sel))(sel, arg1, arg2);
+}
+
+typedef void (^ListenerTrampoline_16)(void * arg0, unsigned long arg1);
+__attribute__((visibility("default"))) __attribute__((used))
+ListenerTrampoline_16 _ObjectiveCBindings_wrapListenerBlock_zuf90e(ListenerTrampoline_16 block) NS_RETURNS_RETAINED {
+ return ^void(void * arg0, unsigned long arg1) {
+ objc_retainBlock(block);
+ block(arg0, arg1);
+ };
+}
+
+typedef void (^BlockingTrampoline_16)(void * waiter, void * arg0, unsigned long arg1);
+__attribute__((visibility("default"))) __attribute__((used))
+ListenerTrampoline_16 _ObjectiveCBindings_wrapBlockingBlock_zuf90e(
+ BlockingTrampoline_16 block, BlockingTrampoline_16 listenerBlock,
+ DOBJC_Context* ctx) NS_RETURNS_RETAINED {
+ BLOCKING_BLOCK_IMPL(ctx, ^void(void * arg0, unsigned long arg1), {
+ objc_retainBlock(block);
+ block(nil, arg0, arg1);
+ }, {
+ objc_retainBlock(listenerBlock);
+ listenerBlock(waiter, arg0, arg1);
+ });
+}
+
+typedef void (^ListenerTrampoline_17)(unsigned short * arg0, unsigned long arg1);
+__attribute__((visibility("default"))) __attribute__((used))
+ListenerTrampoline_17 _ObjectiveCBindings_wrapListenerBlock_vhbh5h(ListenerTrampoline_17 block) NS_RETURNS_RETAINED {
+ return ^void(unsigned short * arg0, unsigned long arg1) {
+ objc_retainBlock(block);
+ block(arg0, arg1);
+ };
+}
+
+typedef void (^BlockingTrampoline_17)(void * waiter, unsigned short * arg0, unsigned long arg1);
+__attribute__((visibility("default"))) __attribute__((used))
+ListenerTrampoline_17 _ObjectiveCBindings_wrapBlockingBlock_vhbh5h(
+ BlockingTrampoline_17 block, BlockingTrampoline_17 listenerBlock,
+ DOBJC_Context* ctx) NS_RETURNS_RETAINED {
+ BLOCKING_BLOCK_IMPL(ctx, ^void(unsigned short * arg0, unsigned long arg1), {
+ objc_retainBlock(block);
+ block(nil, arg0, arg1);
+ }, {
+ objc_retainBlock(listenerBlock);
+ listenerBlock(waiter, arg0, arg1);
+ });
+}
+
+typedef id (^ProtocolTrampoline_12)(void * sel, id arg1);
__attribute__((visibility("default"))) __attribute__((used))
id _ObjectiveCBindings_protocolTrampoline_xr62hr(id target, void * sel, id arg1) {
- return ((ProtocolTrampoline_11)((id (*)(id, SEL, SEL))objc_msgSend)(target, @selector(getDOBJCDartProtocolMethodForSelector:), sel))(sel, arg1);
+ return ((ProtocolTrampoline_12)((id (*)(id, SEL, SEL))objc_msgSend)(target, @selector(getDOBJCDartProtocolMethodForSelector:), sel))(sel, arg1);
}
-typedef id (^ProtocolTrampoline_12)(void * sel, id arg1, id arg2, id * arg3);
+typedef id (^ProtocolTrampoline_13)(void * sel, id arg1, id arg2, id * arg3);
__attribute__((visibility("default"))) __attribute__((used))
id _ObjectiveCBindings_protocolTrampoline_10z9f5k(id target, void * sel, id arg1, id arg2, id * arg3) {
- return ((ProtocolTrampoline_12)((id (*)(id, SEL, SEL))objc_msgSend)(target, @selector(getDOBJCDartProtocolMethodForSelector:), sel))(sel, arg1, arg2, arg3);
+ return ((ProtocolTrampoline_13)((id (*)(id, SEL, SEL))objc_msgSend)(target, @selector(getDOBJCDartProtocolMethodForSelector:), sel))(sel, arg1, arg2, arg3);
}
-typedef id (^ProtocolTrampoline_13)(void * sel, struct _NSZone * arg1);
+typedef id (^ProtocolTrampoline_14)(void * sel, struct _NSZone * arg1);
__attribute__((visibility("default"))) __attribute__((used))
id _ObjectiveCBindings_protocolTrampoline_18nsem0(id target, void * sel, struct _NSZone * arg1) {
- return ((ProtocolTrampoline_13)((id (*)(id, SEL, SEL))objc_msgSend)(target, @selector(getDOBJCDartProtocolMethodForSelector:), sel))(sel, arg1);
-}
-
-typedef id (^ProtocolTrampoline_14)(void * sel, struct objc_selector * arg1);
-__attribute__((visibility("default"))) __attribute__((used))
-id _ObjectiveCBindings_protocolTrampoline_50as9u(id target, void * sel, struct objc_selector * arg1) {
return ((ProtocolTrampoline_14)((id (*)(id, SEL, SEL))objc_msgSend)(target, @selector(getDOBJCDartProtocolMethodForSelector:), sel))(sel, arg1);
}
-typedef id (^ProtocolTrampoline_15)(void * sel, struct objc_selector * arg1, id arg2);
+typedef id (^ProtocolTrampoline_15)(void * sel, struct objc_selector * arg1);
__attribute__((visibility("default"))) __attribute__((used))
-id _ObjectiveCBindings_protocolTrampoline_1mllhpc(id target, void * sel, struct objc_selector * arg1, id arg2) {
- return ((ProtocolTrampoline_15)((id (*)(id, SEL, SEL))objc_msgSend)(target, @selector(getDOBJCDartProtocolMethodForSelector:), sel))(sel, arg1, arg2);
+id _ObjectiveCBindings_protocolTrampoline_50as9u(id target, void * sel, struct objc_selector * arg1) {
+ return ((ProtocolTrampoline_15)((id (*)(id, SEL, SEL))objc_msgSend)(target, @selector(getDOBJCDartProtocolMethodForSelector:), sel))(sel, arg1);
}
-typedef id (^ProtocolTrampoline_16)(void * sel, struct objc_selector * arg1, id arg2, id arg3);
+typedef id (^ProtocolTrampoline_16)(void * sel, struct objc_selector * arg1, id arg2);
+__attribute__((visibility("default"))) __attribute__((used))
+id _ObjectiveCBindings_protocolTrampoline_1mllhpc(id target, void * sel, struct objc_selector * arg1, id arg2) {
+ return ((ProtocolTrampoline_16)((id (*)(id, SEL, SEL))objc_msgSend)(target, @selector(getDOBJCDartProtocolMethodForSelector:), sel))(sel, arg1, arg2);
+}
+
+typedef id (^ProtocolTrampoline_17)(void * sel, struct objc_selector * arg1, id arg2, id arg3);
__attribute__((visibility("default"))) __attribute__((used))
id _ObjectiveCBindings_protocolTrampoline_c7gk2u(id target, void * sel, struct objc_selector * arg1, id arg2, id arg3) {
- return ((ProtocolTrampoline_16)((id (*)(id, SEL, SEL))objc_msgSend)(target, @selector(getDOBJCDartProtocolMethodForSelector:), sel))(sel, arg1, arg2, arg3);
+ return ((ProtocolTrampoline_17)((id (*)(id, SEL, SEL))objc_msgSend)(target, @selector(getDOBJCDartProtocolMethodForSelector:), sel))(sel, arg1, arg2, arg3);
}
#undef BLOCKING_BLOCK_IMPL
diff --git a/pkgs/objective_c/src/observer.h b/pkgs/objective_c/src/observer.h
new file mode 100644
index 0000000..a0ec5dc
--- /dev/null
+++ b/pkgs/objective_c/src/observer.h
@@ -0,0 +1,29 @@
+// Copyright (c) 2025, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+#ifndef OBJECTIVE_C_SRC_OBSERVER_H_
+#define OBJECTIVE_C_SRC_OBSERVER_H_
+
+#import <Foundation/NSObject.h>
+#import <Foundation/NSKeyValueObserving.h>
+
+typedef void (^DOBJCObserverBlock)(NSObject* object, id oldValue, id newValue);
+
+/**
+ * Represents a single KVO observation. Each observation uses a new
+ * DOBJCObserver, even for the same observed object and keyPath.
+ */
+@interface DOBJCObserver : NSObject
+- (instancetype)initForKeyPath:(NSString*)keyPath
+ ofObject:(id)object
+ withBlock:(DOBJCObserverBlock)block;
+- (void)observeValueForKeyPath:(NSString*)keyPath
+ ofObject:(id)object
+ change:(NSDictionary<NSKeyValueChangeKey,id>*)change
+ context:(void*)context;
+- (void)remove;
+- (void)dealloc;
+@end
+
+#endif // OBJECTIVE_C_SRC_OBSERVER_H_
diff --git a/pkgs/objective_c/src/observer.m b/pkgs/objective_c/src/observer.m
new file mode 100644
index 0000000..a5dffa6
--- /dev/null
+++ b/pkgs/objective_c/src/observer.m
@@ -0,0 +1,66 @@
+// Copyright (c) 2025, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+#include "observer.h"
+
+#import <objc/runtime.h>
+
+#if !__has_feature(objc_arc)
+#error "This file must be compiled with ARC enabled"
+#endif
+
+void setAssociatedObject(id from, id key, id value) {
+ if (from != nil) {
+ objc_setAssociatedObject(
+ from, (__bridge void*)key, value, OBJC_ASSOCIATION_RETAIN);
+ }
+}
+
+void addStrongRef(id from, id to) { setAssociatedObject(from, to, to); }
+void removeStrongRef(id from, id to) { setAssociatedObject(from, to, nil); }
+
+@implementation DOBJCObserver {
+ DOBJCObserverBlock _block; // final
+ NSString* _keyPath; // final
+ __weak id _observed; // final, except becomes nil if observed dies
+ BOOL _isObserving; // mutable, guarded by @synchronized(self)
+}
+
+- (instancetype)initForKeyPath:(NSString*)keyPath
+ ofObject:(id)observer
+ withBlock:(DOBJCObserverBlock)block {
+ _block = block;
+ _keyPath = keyPath;
+ _observed = observer;
+ _isObserving = true;
+ [observer addObserver: self
+ forKeyPath: keyPath
+ options: (NSKeyValueObservingOptionNew | NSKeyValueObservingOptionOld)
+ context: nil];
+ addStrongRef(observer, self);
+ return self;
+}
+
+- (void)observeValueForKeyPath:(NSString*)keyPath
+ ofObject:(id)observer
+ change:(NSDictionary<NSKeyValueChangeKey, id>*)change
+ context:(void*)context {
+ _block(
+ observer, change[NSKeyValueChangeOldKey], change[NSKeyValueChangeNewKey]);
+}
+
+- (void)remove {
+ @synchronized(self) {
+ if (_isObserving) {
+ _isObserving = false;
+ [_observed removeObserver:self forKeyPath:_keyPath context:nil];
+ removeStrongRef(_observed, self);
+ }
+ }
+}
+
+- (void)dealloc {
+ [self remove];
+}
+@end
diff --git a/pkgs/objective_c/test/main.c b/pkgs/objective_c/test/main.c
index bdb1532..6abd6ee 100644
--- a/pkgs/objective_c/test/main.c
+++ b/pkgs/objective_c/test/main.c
@@ -20,6 +20,7 @@
ASSERT_SYMBOL("DOBJC_disposeObjCBlockWithClosure"); // objective_c.c
ASSERT_SYMBOL("DOBJC_runOnMainThread"); // objective_c.m
+ ASSERT_SYMBOL("OBJC_CLASS_$_DOBJCObserver"); // observer.c
ASSERT_SYMBOL("OBJC_CLASS_$_DOBJCDartProtocol"); // protocol.m
// objective_c_bindings_generated.m
ASSERT_SYMBOL("_ObjectiveCBindings_wrapListenerBlock_ovsamd");
diff --git a/pkgs/objective_c/test/setup.dart b/pkgs/objective_c/test/setup.dart
index ef594eb..6149d76 100644
--- a/pkgs/objective_c/test/setup.dart
+++ b/pkgs/objective_c/test/setup.dart
@@ -25,6 +25,7 @@
'src/ns_number.m',
'src/objective_c.m',
'src/objective_c_bindings_generated.m',
+ 'src/observer.m',
'src/protocol.m',
].map(_resolve);
const objCFlags = [
@@ -96,6 +97,7 @@
lib.lookup('DOBJC_disposeObjCBlockWithClosure'); // objective_c.c
lib.lookup('DOBJC_runOnMainThread'); // objective_c.m
lib.lookup('Dart_InitializeApiDL'); // dart_api_dl.c
+ lib.lookup('OBJC_CLASS_\$_DOBJCObserver'); // observer.c
lib.lookup('OBJC_CLASS_\$_DOBJCDartProtocol'); // protocol.m
// objective_c_bindings_generated.m
lib.lookup('_ObjectiveCBindings_wrapListenerBlock_ovsamd');