首页 > 解决方案 > ffi Utf8.fromUtf8 在 iOS 上实现 opencv c++ 颤振应用程序时出错

问题描述

我正在使用 opencv 和颤振来构建应用程序。ffi 包用于实现桥接,我从教程代码中得到错误。我找不到任何解决方案。你能帮帮我吗?当 Utf8.fromutf8 和 Utf8.toUtf8 出现错误

import 'dart:ffi' as ffi;
import 'dart:io';
import 'package:ffi/ffi.dart';

// C function signatures
typedef _version_func = ffi.Pointer<Utf8> Function();
typedef _process_image_func = ffi.Void Function(ffi.Pointer<Utf8>, ffi.Pointer<Utf8>);

// Dart function signatures
typedef _VersionFunc = ffi.Pointer<Utf8> Function();
typedef _ProcessImageFunc = void Function(ffi.Pointer<Utf8>, ffi.Pointer<Utf8>);

// Getting a library that holds needed symbols
ffi.DynamicLibrary _lib = Platform.isAndroid
    ? ffi.DynamicLibrary.open('libnative_opencv.so')
    : ffi.DynamicLibrary.process();

// Looking for the functions
final _VersionFunc _version = _lib
    .lookup<ffi.NativeFunction<_version_func>>('version')
    .asFunction();
final _ProcessImageFunc _processImage = _lib
    .lookup<ffi.NativeFunction<_process_image_func>>('process_image')
    .asFunction();

String opencvVersion() {
  return Utf8.fromUtf8(_version());
}

void processImage(ProcessImageArguments args) {
  _processImage(Utf8.toUtf8(args.inputPath), Utf8.toUtf8(args.outputPath));
}

错误

Error: Method not found: 'Utf8.fromUtf8'.

标签: flutterdartffidart-ffi

解决方案


本教程中的 FFi 包可能已过时。Dart FFI在类型中有,和,1.1.1方法。toString()toDartString()toNativeUtf8()Pointer<Utf8>

在这里结帐。

它应该如下所示:

String opencvVersion() {
  return _version().toDartString();
}

void processImage(ProcessImageArguments args) {
  _processImage(args.inputPath.toNativeUtf8(), args.outputPath.toNativeUtf8());
}

推荐阅读