@nxrocks/nx-flutter

Nx plugin adding first class support for Flutter in your Nx workspace

Usage no npm install needed!

<script type="module">
  import nxrocksNxFlutter from 'https://cdn.skypack.dev/@nxrocks/nx-flutter';
</script>

README

nx-flutter

npm version flutter version github action - release semantic-release

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 or nx 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!

    Nx Flutter dependency graph 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 its nx-flutter equivalent (genL10n)

Note that the arguments of the original flutter command are wrapped under --args='...' option in the nx-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)