Flutter: Calling dynamic link library defined in the assets field of pubsepc.yaml file. (Support Windows, Linux and MacOS)
You can use the package to open the dylib defined in the assets
field of pubsepc.yaml
.
int add(int a, int b) {
return a + b;
}
- Compile it to a dylib
```sh
gcc -shared -fPIC -o libadd.so main.c # Linux
gcc -shared -fPIC -o libadd.dll main.c # Windows
clang -shared -fPIC -o libadd.dylib main.c # MacOS
# file: ${PROJECT_ROOT}/assets/libadd.dll
You should declare path of the dylib in the pubspec.yaml
file as images.
flutter:
assets:
- assets/libadd.dll # Fill it in according to your storage location
import 'package:flutter/material.dart';
import 'dart:ffi' as ffi;
import 'package:call/call.dart';
typedef FuncNative = ffi.Int32 Function(ffi.Int32, ffi.Int32);
typedef FuncDart = int Function(int, int);
void main() => runApp(App());
class App extends StatefulWidget {
@override
_AppState createState() => _AppState();
}
class _AppState extends State<App> {
@override
Widget build(BuildContext context) {
var dll = getDyLibModule('assets/libadd.dll'); // use it as images.
var add = dll.lookupFunction<FuncNative, FuncDart>('add');
return Text(
add(999, 54639).toString(),
textDirection: TextDirection.ltr
);
}
}
Finally, You can see the number 55638
in the top left corner of the application.