flutter/packages/flutter_tools/templates/package_ffi
Daco Harkes baa54fdd76
[deps] Bump native assets dependencies (#145612)
Roll of a bunch of breaking changes from the native_assets_builder and
native_assets_cli upstream. Most notably:

* https://github.com/dart-lang/native/pull/946
* https://github.com/dart-lang/native/pull/1018
* https://github.com/dart-lang/native/pull/1019

This PR also updates the template in `flutter create
--template=package_ffi` to use the rewritten API.

This PR does not change any functionality in Flutter.

For reference, the same roll in the Dart SDK:

* https://dart-review.googlesource.com/c/sdk/+/357605
* https://dart-review.googlesource.com/c/sdk/+/357623

## Pre-launch Checklist

- [x] I read the [Contributor Guide] and followed the process outlined
there for submitting PRs.
- [x] I read the [Tree Hygiene] wiki page, which explains my
responsibilities.
- [x] I read and followed the [Flutter Style Guide], including [Features
we expect every widget to implement].
- [x] I signed the [CLA].
- [x] I listed at least one issue that this PR fixes in the description
above.
- [x] I updated/added relevant documentation (doc comments with `///`).
- [x] I added new tests to check the change I am making, or this PR is
[test-exempt].
- [x] All existing and new tests are passing.

<!-- Links -->
[Contributor Guide]:
https://github.com/flutter/flutter/wiki/Tree-hygiene#overview
[Tree Hygiene]: https://github.com/flutter/flutter/wiki/Tree-hygiene
[test-exempt]:
https://github.com/flutter/flutter/wiki/Tree-hygiene#tests
[Flutter Style Guide]:
https://github.com/flutter/flutter/wiki/Style-guide-for-Flutter-repo
[Features we expect every widget to implement]:
https://github.com/flutter/flutter/wiki/Style-guide-for-Flutter-repo#features-we-expect-every-widget-to-implement
[CLA]: https://cla.developers.google.com/
[flutter/tests]: https://github.com/flutter/tests
[breaking change policy]:
https://github.com/flutter/flutter/wiki/Tree-hygiene#handling-breaking-changes
[Discord]: https://github.com/flutter/flutter/wiki/Chat
2024-03-25 15:02:49 +01:00
..
hook [deps] Bump native assets dependencies (#145612) 2024-03-25 15:02:49 +01:00
lib Fixed a lot of typos (#141431) 2024-01-12 22:10:25 +00:00
src.tmpl Native assets support for MacOS and iOS (#130494) 2023-09-10 08:07:13 +00:00
test Native assets support for MacOS and iOS (#130494) 2023-09-10 08:07:13 +00:00
.gitignore.tmpl Native assets support for MacOS and iOS (#130494) 2023-09-10 08:07:13 +00:00
.metadata.tmpl Native assets support for MacOS and iOS (#130494) 2023-09-10 08:07:13 +00:00
analysis_options.yaml.tmpl Native assets support for MacOS and iOS (#130494) 2023-09-10 08:07:13 +00:00
CHANGELOG.md.tmpl Native assets support for MacOS and iOS (#130494) 2023-09-10 08:07:13 +00:00
ffigen.yaml.tmpl Modify plugin_ffi and package_ffi template (#143376) 2024-02-15 10:37:30 +00:00
LICENSE.tmpl Native assets support for MacOS and iOS (#130494) 2023-09-10 08:07:13 +00:00
pubspec.yaml.tmpl [deps] Bump native assets dependencies (#145612) 2024-03-25 15:02:49 +01:00
README.md.tmpl Modify plugin_ffi and package_ffi template (#143376) 2024-02-15 10:37:30 +00:00

# {{projectName}}

{{description}}

## Getting Started

This project is a starting point for a Flutter
[FFI package](https://docs.flutter.dev/development/platform-integration/c-interop),
a specialized package that includes native code directly invoked with Dart FFI.

## Project structure

This template uses the following structure:

* `src`: Contains the native source code, and a CmakeFile.txt file for building
  that source code into a dynamic library.

* `lib`: Contains the Dart code that defines the API of the plugin, and which
  calls into the native code using `dart:ffi`.

* `bin`: Contains the `build.dart` that performs the external native builds.

## Building and bundling native code

`build.dart` does the building of native components.

Bundling is done by Flutter based on the output from `build.dart`.

## Binding to native code

To use the native code, bindings in Dart are needed.
To avoid writing these by hand, they are generated from the header file
(`src/{{projectName}}.h`) by `package:ffigen`.
Regenerate the bindings by running `dart run ffigen --config ffigen.yaml`.

## Invoking native code

Very short-running native functions can be directly invoked from any isolate.
For example, see `sum` in `lib/{{projectName}}.dart`.

Longer-running functions should be invoked on a helper isolate to avoid
dropping frames in Flutter applications.
For example, see `sumAsync` in `lib/{{projectName}}.dart`.

## Flutter help

For help getting started with Flutter, view our
[online documentation](https://flutter.dev/docs), which offers tutorials,
samples, guidance on mobile development, and a full API reference.