README
nx-flutter
Nx Plugin adding first class support for Flutter in your Nx workspace
Contents
Features
Here is a list of some of the coolest features of the plugin:
✅ Generation of Flutter applications/packages/modules/plugins based on Flutter CLI API
✅ Building, packaging, testing, etc your Flutter projects
✅ Integration with Nx's dependency graph (through
nx dep-graph
ornx affected:dep-graph
): this allows you to visualize the dependencies of any Flutter projects inside your workspace, just like Nx natively does it for JS/TS-based projects!Example of running the
nx dep-graph
command on a workspace with 2 Flutter projects inside...
Prerequisite
This plugin relies on flutter's command-line
to do its job. So, you must have flutter
installed on your system. If not, head to flutter.dev/docs/get-started/install and follow installation instructions for your OS.
Then, if you have not already, create an Nx workspace with the following:
# npm
npx create-nx-workspace@latest
# yarn
yarn create nx-workspace@latest
Getting Started
Then you need to install the plugin in order to generate Flutter applications later on.
Installing Plugin
# npm
npm install @nxrocks/nx-flutter --save-dev
# yarn
yarn add @nxrocks/nx-flutter --dev
Generating Project
Simply run the project
generator with the following command:
nx g @nxrocks/nx-flutter:create <app-folder>
You will be prompted for entering the most commonly customized generation options (like application's package
, description
, template
, etc).
To skip the interactive prompt, or if you want to customize all non-prompted options, you can pass them along directly when running the command, as such:
nx g @nxrocks/nx-flutter:create <app-folder> --optionName1 optionValue1 ... --optionNameN optionValueN
Generation Options
Here the list of available generation options :
Arguments | Description |
---|---|
<output-folder> |
The folder that will contain your app |
Option | Value | Description |
---|---|---|
org |
string |
Name of the package |
description |
string |
Description of the project |
androidLanguage |
java | kotlin |
Language to use for Android code |
iOSLanguage |
objc | swift |
Language to use for iOS code |
template |
app | module | package | plugin |
Template of Flutter project to generate |
sample |
string |
Sample ID of the desired sample from the API documentation website (http://docs.flutter.dev) |
platforms |
android | ios | linux | macos | windows | web |
Platforms supported by the project to generate |
pub |
boolean |
Whether to run "flutter pub get" after the project has been created |
offline |
boolean |
Whether or not to run 'flutter pub get' in offline mode |
interactive |
boolean |
Whether or not to prompt for additional options (like platforms , language , etc). Useful in a CI environment, to avoid waiting for user input. |
tags |
string |
Tags to use for linting (comma-separated) |
directory |
string |
Directory where the project is placed |
Plugin Usage
Once your app is generated, you can now use buidlers to manage it.
Here the list of available executors1:
Executor | Arguments | Description |
---|---|---|
analyze |
see flutter help analyze |
Analyze the project's Dart code |
assemble |
see flutter help assemble |
Assemble and build Flutter resources |
attach |
see flutter help attach |
Attach to a running app |
buildAar |
see flutter help build aar |
Build a repository containing an AAR and a POM file |
buildApk |
see flutter help build apk |
Build an Android APK file from your app |
buildAppbundle |
see flutter help build appbundle |
Build an Android App Bundle file from your app |
buildBundle |
see flutter help build bundle |
Build the Flutter assets directory from your app |
buildIos |
see flutter help build ios |
Build an iOS application bundle (Mac OS X host only) |
buildIosframework |
see flutter help build ios-framework |
Produces a .framework directory for a Flutter module and its plugins for integration into existing, plain Xcode projects |
buildIpa |
see flutter help build ipa |
Build an iOS archive bundle (Mac OS X host only) |
clean |
see flutter help clean |
Delete the build/ and dart_tool/ directories |
drive |
see flutter help drive |
Run integration tests for the project on an attached device or emulator |
format |
see flutter help format |
Format one or more Dart files |
gen-l10n |
see flutter help gen-l10n |
Generate localizations for the current project |
install |
see flutter help install |
Install a Flutter app on an attached device |
run |
see flutter help run |
Run your Flutter app on an attached device |
screenshot |
see flutter help screenshot |
Take a screenshot from a connected device |
symbolize |
see flutter help symbolize |
Symbolize a stack trace from an AOT-compiled Flutter app |
test |
see flutter help test |
Run Flutter unit tests for the current project |
1 : Actual executors in your workspace.json
will depend on the type of flutter
project (template
), target platforms
that you choose to generate.
Each executor is based on an original project-level flutter
command. The name is just camelcased to match executors' naming conventions.
Besides, the arguments accepted by each executor, are the same as the original flutter
command they are based upon, encapsulated
under a generic --args='...'
option.
For example:
$ flutter gen-l10n --header "/// my header"
becomes 👉🏾
$ nx genL10n your-flutterapp --args='--header="/// my header"'
Note that the original
flutter
command name (gen-l10n
) has been camelcased for creating itsnx-flutter
equivalent (genL10n
)
Note that the arguments of the original
flutter
command are wrapped under--args='...'
option in thenx-flutter
equivalent
Compatibility with Nx
Every Nx plugin relies on the underlying Nx Workspace/DevKit it runs on. This table provides the compatibility matrix between major versions of Nx workspace and this plugin.
Plugin Version | Nx Workspace version |
---|---|
>=v3.x.x |
>=v12.6.x |
>=v2.x.x |
>=v11.x.x |
<=v1.3.1 |
<=v10.x.x |
License
Copyright (c) 2020-2021 Tine Kondo. Licensed under the MIT License (MIT)