Flutter中如何使用ffi示例

在Flutter中如何使用ffi调用本地代码?能否提供一个简单的示例说明如何实现Dart与C/C++的交互?具体包括如何编写C/C++代码、配置pubspec.yaml文件以及Dart端如何加载和调用本地函数?最好能展示一个完整的流程,比如通过ffi实现一个简单的加法函数。

2 回复

在Flutter中使用FFI调用C函数示例:

  1. 创建C文件(如native_add.c):
int add(int a, int b) { return a + b; }
  1. 创建FFI绑定(dart文件):
import 'dart:ffi';

typedef add_func = Int32 Function(Int32, Int32);
typedef Add = int Function(int, int);

final dylib = DynamicLibrary.open('libnative.so');
final Add add = dylib.lookupFunction<add_func, Add>('add');
  1. 调用:add(2, 3) 返回5

更多关于Flutter中如何使用ffi示例的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


在Flutter中使用FFI(Foreign Function Interface)调用本地代码的示例:

  1. 添加依赖pubspec.yaml 中添加:
dependencies:
  ffi: ^2.0.1
  1. 创建C/C++代码 创建 native/add.c
#include <stdint.h>

int32_t add(int32_t a, int32_t b) {
    return a + b;
}
  1. 配置编译
  • Android:在 android/app/src/main/cpp/CMakeLists.txt 中添加
  • iOS:配置 Xcode 添加源文件
  1. Dart代码调用
import 'dart:ffi';
import 'package:ffi/ffi.dart';

typedef AddFunc = Int32 Function(Int32, Int32);
typedef Add = int Function(int, int);

void main() {
  final dylib = DynamicLibrary.open('libnative.so'); // Android
  // final dylib = DynamicLibrary.process(); // iOS
  
  final Add add = dylib
      .lookup<NativeFunction<AddFunc>>('add')
      .asFunction();
  
  print('3 + 5 = ${add(3, 5)}'); // 输出:3 + 5 = 8
}
  1. 关键说明
  • 数据类型需要匹配(如C的 int32_t 对应Dart的 Int32
  • 内存管理:使用 allocate/free 处理指针
  • 平台差异:
    • Android:.so 文件
    • iOS:.dylib 或直接链接

完整示例建议参考官方文档:https://flutter.dev/docs/development/platform-integration/c-interop

回到顶部