首页 > 解决方案 > 为什么 Flutter 将标准库的 src 复制到 sky_engine 中?

问题描述

由于dart:ffi可从 Dart 获得2.2.0-dev.2.0,我一直在尝试使用该库。示例应用程序对我来说很好用,我也尝试将它用于我的 Flutter 应用程序,但我无法使用 调用它import "dart:ffi",尽管我机器上HEAD的Flutter 是master使用过的 Dart 2.3.0-dev.0.0

我检查了发生了什么,然后我发现sky_engine不包含ffi.dart,而它包含其他库(例如“dart:core”)。我还注意到这些库的源文件被复制$FLUTTER_ROOT/bin/cache/dart-sdk/lib$FLUTTER_ROOT/bin/cache/pkg/sky_engine使用BUILD.gn_embedder.yaml,这似乎是我不能dart:ffi在我的 Flutter 应用程序中使用的原因。

但是,首先,为什么 Flutter 需要 sky_engine,它是“Dart 和 Flutter Engine 的接口”?为什么不用这个胶水代码直接调用它们呢?

标签: dartflutter

解决方案


Flutter 有一个很好的文档让 FFI能够调用原生 C API。在我使用 Flutter 2.5 进行测试时,添加import 'dart:ffi' as ffi;Flutter 应用程序没有问题。如果您能够对您的问题提供最少的重现,这将有助于人们更好地理解问题。

至于为什么 Flutter 使用 sky_engine 的问题,那只是因为它是“flutter_engine”——类似于评论中已经提到的内容。


推荐阅读