无法调用单独线程(隔离)上的 Flutter Dart DynamicLibrary

问题描述 投票:0回答:1

我在

Flutter (Dart)
上编写了应用程序,并且集成了
FFI
库。我需要在单独的
Isolate
上调用该库中的方法,但它给了我以下错误:

Unhandled Exception: Invalid argument(s): Illegal argument in isolate message: (object is a DynamicLibrary)

这是我的代码:

class Hub {
  static final Hub _singleton = Hub._internal();

  late hub lib;
  late Pointer<hub_state_s> state;

  factory Hub() {
    return _singleton;
  }

  Hub._internal();
}
  start() async {
    Hub hub = Hub();
    var initResult = await hub.init();
    if (initResult == 0) {
      await Isolate.run(() {
        print("running isolate");
        hub.lib.hub_start(hub.state);
      });
    }
  }
flutter dart ffi dynamic-library dart-ffi
1个回答
0
投票

原生资源无法发送,请参阅https://dart.dev/language/concurrency#message-types

start() async {
    Hub hub = Hub();
    var initResult = await hub.init();
    if (initResult == 0) {
      await Isolate.run(() {
        print("running isolate");
        hub.lib.hub_start(hub.state);
      });
    }
  }

这里您通过闭包发送集线器实例以进行隔离,因此消息是

未处理的异常:无效参数:隔离消息中的非法参数:(对象是 DynamicLibrary)

正如 Richard 上面所说,请随意在 Isolate 中打开一个新的 DynamicLibrary,如 document 所说

使用相同的路径多次调用此函数,即使跨不同的隔离区,也只会将库加载到 DartVM 进程中一次。多次加载同一库文件会生成相等 (==) 但不相同的 DynamicLibrary 对象。

© www.soinside.com 2019 - 2024. All rights reserved.