44 lines
1.2 KiB
Dart
44 lines
1.2 KiB
Dart
import 'dart:ffi';
|
|
import 'dart:io';
|
|
|
|
import 'package:ffi/ffi.dart';
|
|
import 'package:flutter_example/generated_bindings.dart';
|
|
|
|
class Bindings {
|
|
static Bindings? _instance;
|
|
|
|
final NativeLibrary library;
|
|
|
|
Bindings._(NativeLibrary lib) : library = lib;
|
|
|
|
/// Load from lib
|
|
static Bindings init(String libName) {
|
|
/// The dynamic library in which the symbols for [NativeAddBindings] can be found.
|
|
final DynamicLibrary dylib = () {
|
|
if (Platform.isMacOS || Platform.isIOS) {
|
|
return DynamicLibrary.open('$libName.framework/$libName');
|
|
}
|
|
if (Platform.isAndroid || Platform.isLinux) {
|
|
return DynamicLibrary.open('lib$libName.so');
|
|
}
|
|
if (Platform.isWindows) {
|
|
return DynamicLibrary.open('$libName.dll');
|
|
}
|
|
throw UnsupportedError('Unknown platform: ${Platform.operatingSystem}');
|
|
}.call();
|
|
|
|
/// The bindings to the native functions in [_dylib].
|
|
return _instance ??= Bindings._(NativeLibrary(dylib));
|
|
}
|
|
|
|
static Bindings get instance => _instance!;
|
|
|
|
static int sum(int a, int b) {
|
|
final hello = instance.library.MyLib_Hello_Create(nullptr);
|
|
|
|
final result = instance.library.MyLib_Hello_Sum(hello, a, b, nullptr);
|
|
|
|
return result;
|
|
}
|
|
}
|