@@ -8,6 +8,7 @@ import 'objectbox-c.dart';
8
8
export 'objectbox-c.dart' ;
9
9
10
10
// ignore_for_file: public_member_api_docs
11
+ // ignore_for_file: non_constant_identifier_names
11
12
12
13
/// Tries to use an already loaded objectbox dynamic library. This is the only
13
14
/// option for macOS and iOS and is ~5 times faster than loading from file so
@@ -18,7 +19,8 @@ ObjectBoxC? _tryObjectBoxLibProcess() {
18
19
19
20
ObjectBoxC ? obxc;
20
21
try {
21
- obxc = ObjectBoxC (DynamicLibrary .process ());
22
+ _lib = DynamicLibrary .process ();
23
+ obxc = ObjectBoxC (_lib! );
22
24
_isSupportedVersion (obxc); // may throw in case symbols are not found
23
25
} catch (_) {
24
26
// ignore errors (i.e. symbol not found)
@@ -27,19 +29,19 @@ ObjectBoxC? _tryObjectBoxLibProcess() {
27
29
}
28
30
29
31
ObjectBoxC ? _tryObjectBoxLibFile () {
30
- DynamicLibrary ? lib ;
32
+ _lib = null ;
31
33
var libName = 'objectbox' ;
32
34
if (Platform .isWindows) {
33
35
libName += '.dll' ;
34
36
try {
35
- lib = DynamicLibrary .open (libName);
37
+ _lib = DynamicLibrary .open (libName);
36
38
} on ArgumentError {
37
39
libName = 'lib/' + libName;
38
40
}
39
41
} else if (Platform .isMacOS) {
40
42
libName = 'lib' + libName + '.dylib' ;
41
43
try {
42
- lib = DynamicLibrary .open (libName);
44
+ _lib = DynamicLibrary .open (libName);
43
45
} on ArgumentError {
44
46
libName = '/usr/local/lib/' + libName;
45
47
}
@@ -50,8 +52,8 @@ ObjectBoxC? _tryObjectBoxLibFile() {
50
52
} else {
51
53
return null ;
52
54
}
53
- lib ?? = DynamicLibrary .open (libName);
54
- return ObjectBoxC (lib );
55
+ _lib ?? = DynamicLibrary .open (libName);
56
+ return ObjectBoxC (_lib ! );
55
57
}
56
58
57
59
bool _isSupportedVersion (ObjectBoxC obxc) => obxc.version_is_at_least (
@@ -77,9 +79,8 @@ ObjectBoxC loadObjectBoxLib() {
77
79
return obxc;
78
80
}
79
81
80
- ObjectBoxC ? _cachedBindings;
81
-
82
- ObjectBoxC get C => _cachedBindings ?? = loadObjectBoxLib ();
82
+ DynamicLibrary ? _lib;
83
+ late final ObjectBoxC C = loadObjectBoxLib ();
83
84
84
85
/// Init DartAPI in C for async callbacks.
85
86
///
@@ -111,3 +112,12 @@ void initializeDartAPI() {
111
112
// -1 => failed to initialize - incompatible Dart version
112
113
int _dartAPIInitialized = 0 ;
113
114
Object ? _dartAPIInitException;
115
+
116
+ /// A couple of native functions we need as callbacks to pass back to native.
117
+ /// Unfortunately, ffigen keeps those private.
118
+ typedef _native_close = Int32 Function (Pointer <Void > ptr);
119
+
120
+ late final native_query_close =
121
+ _lib! .lookup <NativeFunction <_native_close>>('obx_query_close' );
122
+ late final native_query_prop_close =
123
+ _lib! .lookup <NativeFunction <_native_close>>('obx_query_prop_close' );
0 commit comments