flutter/packages/flutter_tools/templates
Daco Harkes 2337c64d0c
Native assets support for Linux (#134031)
Support for FFI calls with `@Native external` functions through Native assets on Linux. This enables bundling native code without any build-system boilerplate code.

For more info see:

* https://github.com/flutter/flutter/issues/129757

### Implementation details for Linux.

Mainly follows the design of https://github.com/flutter/flutter/pull/130494.

Some differences are:

* Linux does not support cross compiling or compiling for multiple architectures, so this has not been implemented.
* Linux has no add2app.

The assets copying is done in the install-phase of the CMake build of a flutter app.
CMake requires the native assets folder to exist, so we create it also when the feature is disabled or there are no assets.

### Tests

This PR adds new tests to cover the various use cases.

* packages/flutter_tools/test/general.shard/linux/native_assets_test.dart
  * Unit tests the Linux-specific part of building native assets.

It also extends various existing tests:

* packages/flutter_tools/test/integration.shard/native_assets_test.dart
  * Runs (incl hot reload/hot restart), builds, builds frameworks for Linux and flutter-tester.
2023-09-18 11:13:37 +00:00
..
app Native assets support for MacOS and iOS (#130494) 2023-09-10 08:07:13 +00:00
app_integration_test/integration_test Add an integration test to plugin template example (#117062) 2022-12-15 19:49:14 +00:00
app_shared Native assets support for Linux (#134031) 2023-09-18 11:13:37 +00:00
app_test_widget/test [flutter_tools] Use proper project name in templates (#96373) 2022-02-02 06:50:14 -08:00
cocoapods Add native unit tests to iOS and macOS templates (#117147) 2022-12-21 19:10:22 +00:00
module Native assets support for MacOS and iOS (#130494) 2023-09-10 08:07:13 +00:00
package No longer include .packages in created .gitignore files (#133484) 2023-08-30 00:40:01 +00:00
package_ffi Native assets support for MacOS and iOS (#130494) 2023-09-10 08:07:13 +00:00
plugin Remove @NonNull to avoid warning (#129472) 2023-06-29 21:34:31 +00:00
plugin_ffi Update plugin_ffi generated file to match FFIgen 9.0.0 (#134614) 2023-09-14 06:42:41 +00:00
plugin_shared Native assets support for MacOS and iOS (#130494) 2023-09-10 08:07:13 +00:00
skeleton [flutter_tools] modify Skeleton template to use ListenableBuilder instead of AnimatedBuilder (#128810) 2023-07-06 15:14:51 +00:00
xcode/ios/custom_application_bundle New tooling for iOS 17 physical devices (#131865) 2023-08-09 19:25:12 +00:00
README.md FFI plugins (#96225) 2022-01-26 23:44:45 +01:00
template_manifest.json Native assets support for MacOS and iOS (#130494) 2023-09-10 08:07:13 +00:00

This directory contains templates for flutter create.

The *_shared subdirectories provide files for multiple templates.

  • app_shared for app and skeleton.
  • plugin_shared for (method channel) plugin and plugin_ffi.

For example, there are two app templates: app (the counter app) and skeleton (the more advanced list view/detail view app).

  ┌────────────┐
  │ app_shared │
  └──┬──────┬──┘
     │      │
     │      │
     ▼      ▼
┌─────┐    ┌──────────┐
│ app │    │ skeleton │
└─────┘    └──────────┘

Thanks to app_shared, the templates for app and skeleton can contain only the files that are specific to them alone, and the rest is automatically kept in sync.