call

😭 😭
😭 😭

You can use the package to open the dylib defined in the assets field of pubsepc.yaml.


  • 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.

Libraries

call
core
env
ffi