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; } }