call 0.3.0 call: ^0.3.0 copied to clipboard
Calling dynamic link library(native function) in the way of defining static resources. You can use the package to open the dylib defined in the `assets` field of `pubsepc.yaml`.
call #
You can use the package to open the dylib defined in the assets
field of pubsepc.yaml
.
1.Prepare your dynamic link library #
- Write your C-code
// file: ${PROJECT_ROOT}/assets/main.c
int add(int a, int b) {
return a + b;
}
- Compile it to a dylib
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
2. Declare the assets path #
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
3. Write flutter core code to call native function. #
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
);
}
}
4. Run the flutter application #
Finally, You can see the number 55638
in the top left corner of the application.