diff --git a/sites/docs/src/content/deployment/flavors-ios.md b/sites/docs/src/content/deployment/flavors-ios.md index fff211e42fd..4b70e5a5a85 100644 --- a/sites/docs/src/content/deployment/flavors-ios.md +++ b/sites/docs/src/content/deployment/flavors-ios.md @@ -555,10 +555,16 @@ To learn about them, consult To learn about creating and using flavors, consult the following resources: +* [Set up Flutter flavors for Android][] +* [Set up Flutter flavors for Linux][] +* [Set up Flutter flavors for Windows][] * [How to set up Flutter & Firebase with Multiple Flavors using the FlutterFire CLI][flutterfire-cli] * [Build flavors in Flutter (Android and iOS) with different Firebase projects per flavor Flutter Ready to Go][flavors-firebase] +[Set up Flutter flavors for Android]: /deployment/flavors +[Set up Flutter flavors for Linux]: /deployment/flavors-linux +[Set up Flutter flavors for Windows]: /deployment/flavors-windows [flutterfire-cli]: https://codewithandrea.com/articles/flutter-firebase-multiple-flavors-flutterfire-cli/ [flavors-firebase]: https://medium.com/@animeshjain/build-flavors-in-flutter-android-and-ios-with-different-firebase-projects-per-flavor-27c5c5dac10b diff --git a/sites/docs/src/content/deployment/flavors-linux.md b/sites/docs/src/content/deployment/flavors-linux.md new file mode 100644 index 00000000000..f7b794dc732 --- /dev/null +++ b/sites/docs/src/content/deployment/flavors-linux.md @@ -0,0 +1,324 @@ +--- +title: Set up Flutter flavors for Linux +shortTitle: Flavors (Linux) +description: >- + How to create Flutter flavors for Linux desktop apps. +--- + +This guide shows you how to create Flutter flavors for +Linux desktop apps. + +:::note +To create app flavors for other platforms, +visit the pages on setting up flavors for: + +* [Android][] +* [iOS and macOS][] +* [Windows][] +::: + +## Overview {: #overview } + +A Flutter flavor represents a collection of settings that define +how a specific version of your app builds and runs. +For example, a flavor can determine which window title, +application ID, API endpoint, asset set, and logging configuration +applies to a build. + +On Linux, Flutter uses [CMake][] to configure and build +the native desktop runner. +When you run `flutter run` or `flutter build` with the `--flavor` flag, +Flutter writes the flavor name into +`linux/flutter/ephemeral/generated_config.cmake` as the +`FLUTTER_APP_FLAVOR` variable, and isolates the build outputs +in a flavor-specific directory. + +:::important +The `generated_config.cmake` file is included from +`linux/flutter/CMakeLists.txt`, so `FLUTTER_APP_FLAVOR` +only becomes visible in your top-level `CMakeLists.txt` **after** +the `add_subdirectory(${FLUTTER_MANAGED_DIR})` line. +Any `if(DEFINED FLUTTER_APP_FLAVOR)` block placed before that line +is silently skipped. +::: + +The following table illustrates the build directories that Flutter creates +when a project defines two flavors (`staging`, `production`) +and two build modes (`debug`, `release`): + +| Flavor | Build mode | Output directory | +|------------|------------|------------------------------------------------------| +| staging | debug | `build/linux//staging/debug/bundle/` | +| production | debug | `build/linux//production/debug/bundle/` | +| staging | release | `build/linux//staging/release/bundle/` | +| production | release | `build/linux//production/release/bundle/` | +{:.table .table-striped} + +[CMake]: https://cmake.org/ +[Android]: /deployment/flavors +[iOS and macOS]: /deployment/flavors-ios +[Windows]: /deployment/flavors-windows + +## Configure CMake for flavors (optional) {: #configure-cmake } + +Passing `--flavor` works on Linux without any project configuration. +Existing Flutter projects support flavors with no template updates +or configuration changes required. +When you pass `--flavor`, Flutter isolates the build directory, +populates `appFlavor`, and filters flavor-specific assets automatically. + +Complete the following optional steps only if you want to +differentiate the native runner per flavor—for example, +its GTK application ID or window title. +This example configures two flavors called `staging` and `production`. + +1. Create a new Flutter project called `flavors_example`: + + ```console title="console" + $ flutter create flavors_example + $ cd flavors_example + ``` + +1. Configure flavor-specific application IDs in `linux/CMakeLists.txt`: + + Open `linux/CMakeLists.txt` and find the + `add_subdirectory(${FLUTTER_MANAGED_DIR})` line. + Set the `APPLICATION_ID` per flavor immediately after that line: + + ```cmake title="linux/CMakeLists.txt" + # Flutter library and tool build rules. + set(FLUTTER_MANAGED_DIR "${CMAKE_CURRENT_SOURCE_DIR}/flutter") + add_subdirectory(${FLUTTER_MANAGED_DIR}) + + if(DEFINED FLUTTER_APP_FLAVOR) + if(FLUTTER_APP_FLAVOR STREQUAL "staging") + set(APPLICATION_ID "com.example.staging") + elseif(FLUTTER_APP_FLAVOR STREQUAL "production") + set(APPLICATION_ID "com.example.production") + endif() + endif() + ``` + + `APPLICATION_ID` must be configured after + `add_subdirectory(${FLUTTER_MANAGED_DIR})` because + `FLUTTER_APP_FLAVOR` only becomes available at this point, + and before `add_subdirectory("runner")` where `APPLICATION_ID` is consumed. + + :::important + Leave `set(BINARY_NAME ...)` unchanged. + The Flutter CLI resolves the executable path by parsing that line literally, + so renaming the binary per flavor prevents `flutter run` + from launching the app. + ::: + +1. Verify that your flavors run correctly: + + Run the `staging` flavor: + + ```console title="console" + $ flutter run -d linux --flavor staging + ``` + + Run the `production` flavor: + + ```console title="console" + $ flutter run -d linux --flavor production + ``` + +## Launch a flavor {: #launch-a-flavor } + +After you configure flavors for your app, +run, build, or test a specific flavor using the `--flavor` flag +with the Flutter CLI. + +### Run a flavor in debug mode {: #run-a-flavor } + +To run a specific flavor during development, +pass the `--flavor` option to `flutter run`: + +```console title="console" +$ flutter run -d linux --flavor +``` + +Replace `` with the name of your flavor +(for example, `staging` or `production`). + +### Build a release binary {: #build-a-flavor } + +To build a release executable for a specific flavor, +pass the `--flavor` option to `flutter build`: + +```console title="console" +$ flutter build linux --flavor +``` + +Flutter outputs the compiled bundle to +`build/linux///release/bundle/`. + +### Run tests with a flavor {: #test-a-flavor } + +The `--flavor` option also works with `flutter test` and `flutter drive`, +allowing you to run unit, widget, or integration tests +against a specific flavor configuration: + +```console title="console" +$ flutter test --flavor +``` + +## Use flavors in Flutter code {: #use-flavors-in-code } + +After adding flavors, +you can adjust app behavior—such as selecting API endpoints, +toggling features, or setting analytics keys—based on the active flavor. + +The Flutter framework provides the `appFlavor` constant in the `services` +library, which retrieves the flavor name passed to the `--flavor` flag +during `flutter run` or `flutter build`. + +1. **Import the services library:** + + Add the following import to your Dart file: + + ```dart + import 'package:flutter/services.dart'; + ``` + +1. **Read the flavor value:** + + Use the `appFlavor` constant in your application logic + (often in `main()`) to handle flavor-specific configuration: + + ```dart + void main() { + if (appFlavor == 'production') { + Config.apiUrl = 'https://api.example.com'; + } else if (appFlavor == 'staging') { + Config.apiUrl = 'https://staging.api.example.com'; + } + + runApp(const MyApp()); + } + ``` + + :::note + The value of `appFlavor` matches the string passed to the `--flavor` flag. + If you run or build without specifying a flavor, + `appFlavor` returns `null` and the build uses the + [default flavor](#set-default-flavor). + ::: + +## Customize configurations {: #customize-configurations } + +After adding flavors, +you can customize native settings and assets for each configuration. + +### Create distinct window titles {: #create-distinct-window-titles } + +To help distinguish between different flavors at runtime, +customize the native window title for each flavor. + +1. In `linux/runner/CMakeLists.txt`, pass `FLUTTER_APP_FLAVOR` + as a preprocessor definition directly after the existing + `APPLICATION_ID` definition: + + ```cmake title="linux/runner/CMakeLists.txt" + # Add preprocessor definitions for the application ID. + add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + + if(DEFINED FLUTTER_APP_FLAVOR AND NOT FLUTTER_APP_FLAVOR STREQUAL "") + add_definitions(-DFLUTTER_APP_FLAVOR="${FLUTTER_APP_FLAVOR}") + endif() + ``` + +1. In `linux/runner/my_application.cc`, update the window title + in the `my_application_activate` function: + + ```c title="linux/runner/my_application.cc" + const gchar* window_title = "flavors_example"; + #ifdef FLUTTER_APP_FLAVOR + if (g_strcmp0(FLUTTER_APP_FLAVOR, "staging") == 0) { + window_title = "Staging App"; + } else if (g_strcmp0(FLUTTER_APP_FLAVOR, "production") == 0) { + window_title = "Production App"; + } + #endif + ``` + + Then update `my_application_activate` to use `window_title` + instead of the hardcoded string literals: + + ```c title="linux/runner/my_application.cc" + gtk_header_bar_set_title(header_bar, window_title); + ... + gtk_window_set_title(window, window_title); + ``` + +### Configure app icons {: #configure-app-icons } + +On Linux, application icons are not embedded directly in the compiled +executable binary. +Instead, the desktop environment resolves app icons through +`.desktop` launcher files and installed icon themes. + +To provide different icons or launcher entries for each flavor, +configure your Linux package format—such as Snap, Flatpak, or Debian +packages—to install distinct desktop entries and icon assets. +To learn more about packaging Linux apps, refer to +[Build and release a Linux desktop app][]. + +### Bundle assets by flavor {: #bundle-assets } + +If you have assets that only apply to a specific flavor, +configure Flutter to only bundle those assets when building that flavor. +This prevents unused assets from increasing your application bundle size. + +To bundle assets conditionally, +add the `flavors` list to an asset entry in `pubspec.yaml`: + +```yaml title="pubspec.yaml" +flutter: + assets: + - assets/common/ + - path: assets/staging/ + flavors: + - staging + - path: assets/production/ + flavors: + - production +``` + +To learn more, consult the [`assets` field][] in [Flutter pubspec options][]. + +[`assets` field]: /tools/pubspec#assets +[Flutter pubspec options]: /tools/pubspec + +### Set a default flavor {: #set-default-flavor } + +To specify a flavor to use when running or building +without the `--flavor` flag, +add the `default-flavor` property to `pubspec.yaml`: + +```yaml title="pubspec.yaml" +flutter: + default-flavor: staging +``` + +To learn more, consult the [`default-flavor` field][] in +[Flutter pubspec options][]. + +[`default-flavor` field]: /tools/pubspec#default-flavor-field + +## More information {: #more-information } + +For more information on flavors and desktop deployment, +consult the following resources: + +* [Set up Flutter flavors for Android][Android] +* [Set up Flutter flavors for iOS and macOS][iOS and macOS] +* [Set up Flutter flavors for Windows][Windows] +* [Build and release a Linux desktop app][] + +[Build and release a Linux desktop app]: /deployment/linux +[Set up Flutter flavors for Android]: /deployment/flavors +[Set up Flutter flavors for iOS and macOS]: /deployment/flavors-ios +[Set up Flutter flavors for Windows]: /deployment/flavors-windows diff --git a/sites/docs/src/content/deployment/flavors-windows.md b/sites/docs/src/content/deployment/flavors-windows.md new file mode 100644 index 00000000000..09044cdc0fb --- /dev/null +++ b/sites/docs/src/content/deployment/flavors-windows.md @@ -0,0 +1,335 @@ +--- +title: Set up Flutter flavors for Windows +shortTitle: Flavors (Windows) +description: >- + How to create Flutter flavors for Windows desktop apps. +--- + +This guide shows you how to create Flutter flavors for +Windows desktop apps. + +:::note +To create app flavors for other platforms, +visit the pages on setting up flavors for: + +* [Android][] +* [iOS and macOS][] +* [Linux][] +::: + +## Overview {: #overview } + +A Flutter flavor represents a collection of settings that define +how a specific version of your app builds and runs. +For example, a flavor can determine which window title, +application icon, API endpoint, asset set, and logging configuration +applies to a build. + +On Windows, Flutter uses [CMake][] to configure and build +the native desktop runner. +When you run `flutter run` or `flutter build` with the `--flavor` flag, +Flutter writes the flavor name into +`windows/flutter/ephemeral/generated_config.cmake` as the +`FLUTTER_APP_FLAVOR` variable, and isolates the build outputs +in a flavor-specific directory. + +:::important +The `generated_config.cmake` file is included from +`windows/flutter/CMakeLists.txt`, so `FLUTTER_APP_FLAVOR` +only becomes visible in your top-level `CMakeLists.txt` **after** +the `add_subdirectory(${FLUTTER_MANAGED_DIR})` line. +Any `if(DEFINED FLUTTER_APP_FLAVOR)` block placed before that line +is silently skipped. +::: + +The following table illustrates the build directories that Flutter creates +when a project defines two flavors (`staging`, `production`) +and two build modes (`debug`, `release`): + +| Flavor | Build mode | Output directory | +|------------|------------|---------------------------------------------------------| +| staging | debug | `build/windows//staging/runner/Debug/` | +| production | debug | `build/windows//production/runner/Debug/` | +| staging | release | `build/windows//staging/runner/Release/` | +| production | release | `build/windows//production/runner/Release/` | +{:.table .table-striped} + +[CMake]: https://cmake.org/ +[Android]: /deployment/flavors +[iOS and macOS]: /deployment/flavors-ios +[Linux]: /deployment/flavors-linux + +## Create and run flavors {: #create-and-run-flavors } + +Passing `--flavor` works on Windows without any CMake configuration. +Existing Flutter projects support flavors with no template updates +or configuration changes required. +When you pass `--flavor`, Flutter isolates the build directory, +populates `appFlavor`, and filters flavor-specific assets automatically. + +To try flavors with a sample project, +complete the following steps: + +1. Create a new Flutter project called `flavors_example`: + + ```console title="console" + $ flutter create flavors_example + $ cd flavors_example + ``` + +1. Verify that your flavors run correctly: + + Run the `staging` flavor: + + ```console title="console" + $ flutter run -d windows --flavor staging + ``` + + Run the `production` flavor: + + ```console title="console" + $ flutter run -d windows --flavor production + ``` + +To customize native runner settings for each flavor—such as +the window title or application icon—refer to +[Customize configurations](#customize-configurations). + +## Launch a flavor {: #launch-a-flavor } + +After you define flavors for your app, +run, build, or test a specific flavor using the `--flavor` flag +with the Flutter CLI. + +### Run a flavor in debug mode {: #run-a-flavor } + +To run a specific flavor during development, +pass the `--flavor` option to `flutter run`: + +```console title="console" +$ flutter run -d windows --flavor +``` + +Replace `` with the name of your flavor +(for example, `staging` or `production`). + +### Build a release binary {: #build-a-flavor } + +To build a release executable for a specific flavor, +pass the `--flavor` option to `flutter build`: + +```console title="console" +$ flutter build windows --flavor +``` + +Flutter outputs the compiled executable to +`build/windows///runner/Release/`. + +### Run tests with a flavor {: #test-a-flavor } + +The `--flavor` option also works with `flutter test` and `flutter drive`, +allowing you to run unit, widget, or integration tests +against a specific flavor configuration: + +```console title="console" +$ flutter test --flavor +``` + +## Use flavors in Flutter code {: #use-flavors-in-code } + +After adding flavors, +you can adjust app behavior—such as selecting API endpoints, +toggling features, or setting analytics keys—based on the active flavor. + +The Flutter framework provides the `appFlavor` constant in the `services` +library, which retrieves the flavor name passed to the `--flavor` flag +during `flutter run` or `flutter build`. + +1. **Import the services library:** + + Add the following import to your Dart file: + + ```dart + import 'package:flutter/services.dart'; + ``` + +1. **Read the flavor value:** + + Use the `appFlavor` constant in your application logic + (often in `main()`) to handle flavor-specific configuration: + + ```dart + void main() { + if (appFlavor == 'production') { + Config.apiUrl = 'https://api.example.com'; + } else if (appFlavor == 'staging') { + Config.apiUrl = 'https://staging.api.example.com'; + } + + runApp(const MyApp()); + } + ``` + + :::note + The value of `appFlavor` matches the string passed to the `--flavor` flag. + If you run or build without specifying a flavor, + `appFlavor` returns `null` and the build uses the + [default flavor](#set-default-flavor). + ::: + +## Customize configurations {: #customize-configurations } + +To differentiate the native Windows runner per flavor—such as +giving each flavor a unique window title or application icon—configure +CMake to generate the runner source and resource files +using `configure_file`. + +### Configure CMake for native settings {: #configure-cmake-native } + +CMake evaluates `windows/runner/CMakeLists.txt` after `FLUTTER_APP_FLAVOR` +is defined. +You can inspect this variable to configure flavor-specific values, +then use `configure_file` to substitute them into template files +for the C++ runner (`main.cpp`) and the Windows resource script (`Runner.rc`). + +In `windows/runner/CMakeLists.txt`, add the following block +before the `add_executable(${BINARY_NAME} ...)` line: + +```cmake title="windows/runner/CMakeLists.txt" +# Configure flavor-specific settings. +if(DEFINED FLUTTER_APP_FLAVOR) + if(FLUTTER_APP_FLAVOR STREQUAL "staging") + set(RUNNER_APP_ICON "staging.ico") + set(WINDOW_TITLE "Staging App") + elseif(FLUTTER_APP_FLAVOR STREQUAL "production") + set(RUNNER_APP_ICON "production.ico") + set(WINDOW_TITLE "Production App") + endif() +else() + set(RUNNER_APP_ICON "app_icon.ico") + set(WINDOW_TITLE "${BINARY_NAME}") +endif() + +configure_file( + "${CMAKE_CURRENT_SOURCE_DIR}/main.cpp.in" + "${CMAKE_CURRENT_SOURCE_DIR}/main.cpp" + @ONLY +) + +configure_file( + "${CMAKE_CURRENT_SOURCE_DIR}/Runner.rc.in" + "${CMAKE_CURRENT_SOURCE_DIR}/Runner.rc" + @ONLY +) +``` + +:::note +Because `configure_file` generates `main.cpp` and `Runner.rc` +in the source directory at build time, +add both generated files to your project's `.gitignore`: + +```gitignore title=".gitignore" +windows/runner/main.cpp +windows/runner/Runner.rc +``` + +Commit the `.in` template files to version control instead. +::: + +### Create distinct window titles {: #create-distinct-window-titles } + +To display a flavor-specific window title when the app launches: + +1. Rename `windows/runner/main.cpp` to `windows/runner/main.cpp.in`. + +1. In `windows/runner/main.cpp.in`, find where `window.Create` is called + and replace the hardcoded title with `@WINDOW_TITLE@`: + + ```cpp title="windows/runner/main.cpp.in" + if (!window.Create(L"@WINDOW_TITLE@", origin, size)) { + return EXIT_FAILURE; + } + ``` + + At configure time, CMake substitutes `@WINDOW_TITLE@` + with the title configured for the active flavor. + +### Create distinct app icons {: #create-distinct-app-icons } + +To provide unique desktop icons for each flavor: + +1. Prepare your icon files in `.ico` format + (for example, `staging.ico` and `production.ico`) + and place them in `windows/runner/resources/` + alongside the default `app_icon.ico`. + +1. Rename `windows/runner/Runner.rc` to `windows/runner/Runner.rc.in`. + +1. In `windows/runner/Runner.rc.in`, locate the `IDI_APP_ICON` line + and update the icon path to use `@RUNNER_APP_ICON@`: + + ```rc title="windows/runner/Runner.rc.in" + IDI_APP_ICON ICON "resources\\@RUNNER_APP_ICON@" + ``` + + You can also update the metadata strings, such as `FileDescription` + and `ProductName`, to use `@WINDOW_TITLE@`: + + ```rc title="windows/runner/Runner.rc.in" + VALUE "FileDescription", "@WINDOW_TITLE@" "\0" + VALUE "ProductName", "@WINDOW_TITLE@" "\0" + ``` + +### Bundle assets by flavor {: #bundle-assets } + +If you have assets that only apply to a specific flavor, +configure Flutter to only bundle those assets when building that flavor. +This prevents unused assets from increasing your application bundle size. + +To bundle assets conditionally, +add the `flavors` list to an asset entry in `pubspec.yaml`: + +```yaml title="pubspec.yaml" +flutter: + assets: + - assets/common/ + - path: assets/staging/ + flavors: + - staging + - path: assets/production/ + flavors: + - production +``` + +To learn more, consult the [`assets` field][] in [Flutter pubspec options][]. + +[`assets` field]: /tools/pubspec#assets +[Flutter pubspec options]: /tools/pubspec + +### Set a default flavor {: #set-default-flavor } + +To specify a flavor to use when running or building +without the `--flavor` flag, +add the `default-flavor` property to `pubspec.yaml`: + +```yaml title="pubspec.yaml" +flutter: + default-flavor: staging +``` + +To learn more, consult the [`default-flavor` field][] in +[Flutter pubspec options][]. + +[`default-flavor` field]: /tools/pubspec#default-flavor-field + +## More information {: #more-information } + +For more information on flavors and desktop deployment, +consult the following resources: + +* [Set up Flutter flavors for Android][Android] +* [Set up Flutter flavors for iOS and macOS][iOS and macOS] +* [Set up Flutter flavors for Linux][Linux] +* [Build and release a Windows desktop app][] + +[Build and release a Windows desktop app]: /deployment/windows diff --git a/sites/docs/src/content/deployment/flavors.md b/sites/docs/src/content/deployment/flavors.md index 822df39412d..ec968ddeae2 100644 --- a/sites/docs/src/content/deployment/flavors.md +++ b/sites/docs/src/content/deployment/flavors.md @@ -402,8 +402,14 @@ When setting `abiFilters` in product flavors, pass For more information on creating and using flavors, check out the following resources: +* [Set up Flutter flavors for iOS and macOS][] +* [Set up Flutter flavors for Linux][] +* [Set up Flutter flavors for Windows][] * [Build flavors in Flutter (Android and iOS) with Firebase][] * [How to Setup Flutter & Firebase with Multiple Flavors using the FlutterFire CLI][flutterfireCLI] +[Set up Flutter flavors for iOS and macOS]: /deployment/flavors-ios +[Set up Flutter flavors for Linux]: /deployment/flavors-linux +[Set up Flutter flavors for Windows]: /deployment/flavors-windows [Build flavors in Flutter (Android and iOS) with Firebase]: https://medium.com/@animeshjain/build-flavors-in-flutter-android-and-ios-with-different-firebase-projects-per-flavor-27c5c5dac10b [flutterfireCLI]: https://codewithandrea.com/articles/flutter-firebase-multiple-flavors-flutterfire-cli/ diff --git a/sites/docs/src/content/platform-integration/linux/setup.md b/sites/docs/src/content/platform-integration/linux/setup.md index ac462e89e9a..e9493e27da0 100644 --- a/sites/docs/src/content/platform-integration/linux/setup.md +++ b/sites/docs/src/content/platform-integration/linux/setup.md @@ -127,6 +127,9 @@ or begin expanding integration with Linux.
  • Release a Linux app
  • +
  • + Set up app flavors +
  • Write Linux-specific code
  • diff --git a/sites/docs/src/content/platform-integration/windows/setup.md b/sites/docs/src/content/platform-integration/windows/setup.md index dfbfa284a9f..3960c0c96de 100644 --- a/sites/docs/src/content/platform-integration/windows/setup.md +++ b/sites/docs/src/content/platform-integration/windows/setup.md @@ -147,6 +147,9 @@ or begin expanding integration with Windows.
  • Deploy to windows
  • +
  • + Set up app flavors +
  • Write Windows-specific code
  • diff --git a/sites/docs/src/content/tools/pubspec.md b/sites/docs/src/content/tools/pubspec.md index 79ea828f645..f34abe0cd6b 100644 --- a/sites/docs/src/content/tools/pubspec.md +++ b/sites/docs/src/content/tools/pubspec.md @@ -180,8 +180,8 @@ Subfields of `assets`: * `path`: The path to an asset file or directory. * `flavors`: A list of flutter flavors to use with assets at a specific path. To learn more about - flavors, visit [Set up flavors for iOS and macOS][] and - [Set up flavors for Android][]. + flavors, visit set up flavors for [Android], [iOS and macOS][], + [Windows][], and [Linux][]. * `platforms`: A list of platforms to use with assets at a specific path. Valid values are `android`, `ios`, `web`, `linux`, `macos`, and `windows`. @@ -248,8 +248,10 @@ flutter: args: ['--tessellate'] ``` -[Set up flavors for iOS and macOS]: /deployment/flavors-ios -[Set up flavors for Android]: /deployment/flavors +[Android]: /deployment/flavors +[iOS and macOS]: /deployment/flavors-ios +[Linux]: /deployment/flavors-linux +[Windows]: /deployment/flavors-windows [Transforming assets at build time]: /ui/assets/asset-transformation [Assets and images]: /ui/assets/assets-and-images [asset images in package dependencies]: /ui/assets/assets-and-images#from-packages @@ -331,11 +333,13 @@ $ flutter run --flavor staging ``` To learn how to create Flutter flavors, -visit [Set up Flutter flavors for Android][] and -[Set up Flutter flavors for iOS and macOS][]. +visit Set up Flutter flavors for [Android][], +[iOS and macOS][], [Linux][], and [Windows][]. -[Set up Flutter flavors for Android]: /deployment/flavors -[Set up Flutter flavors for iOS and macOS]: /deployment/flavors-ios +[Android]: /deployment/flavors +[iOS and macOS]: /deployment/flavors-ios +[Windows]: /deployment/flavors-windows +[Linux]: /deployment/flavors-linux ### deferred-components field {: #deferred-components } @@ -774,8 +778,10 @@ and pubspec files, visit the following: * [Integration testing][] * [Package dependency management][] * [Package dependencies][] on dart.dev -* [Set up Flutter flavors for Android][] -* [Set up Flutter flavors for iOS and macOS][] +* [Set up Flutter flavors for Android][Android] +* [Set up Flutter flavors for iOS and macOS][iOS and macOS] +* [Set up Flutter flavors for Linux][Linux] +* [Set up Flutter flavors for Windows][Windows] * [Transforming assets at build time][] * [Using packages][] * [What not to commit][] on dart.dev diff --git a/sites/docs/src/data/sidenav/default.yml b/sites/docs/src/data/sidenav/default.yml index dea04b910ce..15255c1e822 100644 --- a/sites/docs/src/data/sidenav/default.yml +++ b/sites/docs/src/data/sidenav/default.yml @@ -581,6 +581,10 @@ permalink: /deployment/flavors - title: Create app flavors for iOS and macOS permalink: /deployment/flavors-ios + - title: Create app flavors for Linux + permalink: /deployment/flavors-linux + - title: Create app flavors for Windows + permalink: /deployment/flavors-windows - title: Build and release an Android app permalink: /deployment/android - title: Build and release an iOS app