Flutter中如何使用ffi示例
在Flutter中如何使用ffi调用本地代码?能否提供一个简单的示例说明如何实现Dart与C/C++的交互?具体包括如何编写C/C++代码、配置pubspec.yaml文件以及Dart端如何加载和调用本地函数?最好能展示一个完整的流程,比如通过ffi实现一个简单的加法函数。
2 回复
在Flutter中使用FFI调用C函数示例:
- 创建C文件(如
native_add.c):
int add(int a, int b) { return a + b; }
- 创建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');
- 调用:
add(2, 3)返回5
更多关于Flutter中如何使用ffi示例的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
在Flutter中使用FFI(Foreign Function Interface)调用本地代码的示例:
- 添加依赖
在
pubspec.yaml中添加:
dependencies:
ffi: ^2.0.1
- 创建C/C++代码
创建
native/add.c:
#include <stdint.h>
int32_t add(int32_t a, int32_t b) {
return a + b;
}
- 配置编译
- Android:在
android/app/src/main/cpp/CMakeLists.txt中添加 - iOS:配置 Xcode 添加源文件
- 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
}
- 关键说明
- 数据类型需要匹配(如C的
int32_t对应Dart的Int32) - 内存管理:使用
allocate/free处理指针 - 平台差异:
- Android:
.so文件 - iOS:
.dylib或直接链接
- Android:
完整示例建议参考官方文档:https://flutter.dev/docs/development/platform-integration/c-interop

