Flutter: Difference between revisions
imported>Onny Add Flutter development notes |
imported from old wiki (The second flake example doesn't work because it uses a variable androidSdk which is defined in the flake before it, but not the second one) |
||
(13 intermediate revisions by 7 users not shown) | |||
Line 1: | Line 1: | ||
[https://flutter.dev Flutter] is an open-source mobile application development framework created by Google. It allows developers to build high-performance, cross-platform apps for iOS and Android using a single codebase. | |||
In order to understand the sections below more for Android development on NixOS, [[Android|check out the Android wiki page]]. | |||
== Development == | == Development == | ||
Create following <code>flake.nix</code> in a new project directory | === Linux desktop/Web === | ||
To build Flutter apps to Linux desktop or Web you only need the <code>flutter</code> package from Nixpkgs. | |||
Then run <code>flutter build linux</code> or <code>flutter build web</code>. | |||
=== Android === | |||
The easiest way is to install Android Studio by adding <code>pkgs.android-studio</code> to your list of packages in configuration.nix. | |||
If you prefer [[Vscode|VSCode]], you can create a [[Development environment with nix-shell|dev-shell]] with the packages "jdk", "flutter", and a preferred android sdk such as the preconfigured one "androidenv.androidPkgs_9_0.androidsdk" (mentioned in the Android wiki page). Add other packages if missing any. Or you can install Android Studio to get all the Android packages, and install Flutter. | |||
Below is an example [[Flakes|flake.nix]] for creating a dev shell. Create following <code>flake.nix</code> in a new project directory | |||
{{file| | {{file|flake.nix|nix|<nowiki> | ||
{ | { | ||
description = "Flutter 3. | description = "Flutter 3.13.x"; | ||
inputs = { | inputs = { | ||
nixpkgs.url = "github:NixOS/nixpkgs/23. | nixpkgs.url = "github:NixOS/nixpkgs/23.11"; | ||
flake-utils.url = "github:numtide/flake-utils"; | flake-utils.url = "github:numtide/flake-utils"; | ||
}; | }; | ||
Line 21: | Line 35: | ||
}; | }; | ||
}; | }; | ||
buildToolsVersion = " | buildToolsVersion = "34.0.0"; | ||
androidComposition = pkgs.androidenv.composeAndroidPackages { | androidComposition = pkgs.androidenv.composeAndroidPackages { | ||
buildToolsVersions = [ buildToolsVersion "28.0.3" ]; | buildToolsVersions = [ buildToolsVersion "28.0.3" ]; | ||
platformVersions = [ " | platformVersions = [ "34" "28" ]; | ||
abiVersions = [ "armeabi-v7a" "arm64-v8a" ]; | abiVersions = [ "armeabi-v7a" "arm64-v8a" ]; | ||
}; | }; | ||
Line 35: | Line 49: | ||
buildInputs = [ | buildInputs = [ | ||
flutter | flutter | ||
androidSdk | androidSdk # The customized SDK that we've made above | ||
jdk17 | |||
]; | ]; | ||
}; | }; | ||
Line 42: | Line 56: | ||
} | } | ||
</nowiki>}} | </nowiki>}} | ||
If you don't want to customize the android sdk, you can instead use the predefined packages, as mentioned [https://nixos.org/manual/nixpkgs/unstable/#using-predefined-android-package-compositions in this section on the manual], such as <code>androidenv.androidPkgs_9_0.androidsdk</code>: | |||
{{file|flake.nix|nix|<nowiki> | |||
{ | |||
description = "Flutter 3.13.x"; | |||
inputs = { | |||
nixpkgs.url = "github:NixOS/nixpkgs/23.11"; | |||
flake-utils.url = "github:numtide/flake-utils"; | |||
}; | |||
outputs = { self, nixpkgs, flake-utils }: | |||
flake-utils.lib.eachDefaultSystem (system: | |||
let | |||
pkgs = import nixpkgs { | |||
inherit system; | |||
config = { | |||
android_sdk.accept_license = true; | |||
allowUnfree = true; | |||
}; | |||
}; | |||
androidSdk = pkgs.androidenv.androidPkgs_9_0.androidsdk; | |||
in | |||
{ | |||
devShell = | |||
with pkgs; mkShell rec { | |||
ANDROID_SDK_ROOT = "${androidSdk}/libexec/android-sdk"; | |||
buildInputs = [ | |||
flutter | |||
androidsdk | |||
jdk17 | |||
]; | |||
}; | |||
}); | |||
} | |||
</nowiki>}} | |||
Run following commands to start a new demo project and run the "hello world" application | Run following commands to start a new demo project and run the "hello world" application | ||
<syntaxhighlight lang="console"> | <syntaxhighlight lang="console"> | ||
# nix develop | |||
# flutter create my_app | # flutter create my_app | ||
# cd my_app | # cd my_app | ||
# flutter run | # flutter run | ||
</syntaxhighlight> | </syntaxhighlight> | ||
== Emulators == | |||
[[Android|View the Android wiki page for more info]], but you can set up emulators in Android Studio, run them from there, then target the emulator in VSCode when running your flutter code. Otherwise, you can Nixify or even manually add your emulators as stated in the Android wiki page | |||
== Packaging == | == Packaging == | ||
Line 58: | Line 112: | ||
* The [https://github.com/orgs/NixOS/teams/flutter team working on flutter in nixpkgs] maintains several pieces of infrastructure related to the cause. The documentation is lacking as of now, but there are plans to improve it. | * The [https://github.com/orgs/NixOS/teams/flutter team working on flutter in nixpkgs] maintains several pieces of infrastructure related to the cause. The documentation is lacking as of now, but there are plans to improve it. | ||
[[Category: Development]] |
Latest revision as of 10:10, 16 August 2024
Flutter is an open-source mobile application development framework created by Google. It allows developers to build high-performance, cross-platform apps for iOS and Android using a single codebase.
In order to understand the sections below more for Android development on NixOS, check out the Android wiki page.
Development
Linux desktop/Web
To build Flutter apps to Linux desktop or Web you only need the flutter
package from Nixpkgs.
Then run flutter build linux
or flutter build web
.
Android
The easiest way is to install Android Studio by adding pkgs.android-studio
to your list of packages in configuration.nix.
If you prefer VSCode, you can create a dev-shell with the packages "jdk", "flutter", and a preferred android sdk such as the preconfigured one "androidenv.androidPkgs_9_0.androidsdk" (mentioned in the Android wiki page). Add other packages if missing any. Or you can install Android Studio to get all the Android packages, and install Flutter.
Below is an example flake.nix for creating a dev shell. Create following flake.nix
in a new project directory
flake.nix
{
description = "Flutter 3.13.x";
inputs = {
nixpkgs.url = "github:NixOS/nixpkgs/23.11";
flake-utils.url = "github:numtide/flake-utils";
};
outputs = { self, nixpkgs, flake-utils }:
flake-utils.lib.eachDefaultSystem (system:
let
pkgs = import nixpkgs {
inherit system;
config = {
android_sdk.accept_license = true;
allowUnfree = true;
};
};
buildToolsVersion = "34.0.0";
androidComposition = pkgs.androidenv.composeAndroidPackages {
buildToolsVersions = [ buildToolsVersion "28.0.3" ];
platformVersions = [ "34" "28" ];
abiVersions = [ "armeabi-v7a" "arm64-v8a" ];
};
androidSdk = androidComposition.androidsdk;
in
{
devShell =
with pkgs; mkShell rec {
ANDROID_SDK_ROOT = "${androidSdk}/libexec/android-sdk";
buildInputs = [
flutter
androidSdk # The customized SDK that we've made above
jdk17
];
};
});
}
If you don't want to customize the android sdk, you can instead use the predefined packages, as mentioned in this section on the manual, such as androidenv.androidPkgs_9_0.androidsdk
:
flake.nix
{
description = "Flutter 3.13.x";
inputs = {
nixpkgs.url = "github:NixOS/nixpkgs/23.11";
flake-utils.url = "github:numtide/flake-utils";
};
outputs = { self, nixpkgs, flake-utils }:
flake-utils.lib.eachDefaultSystem (system:
let
pkgs = import nixpkgs {
inherit system;
config = {
android_sdk.accept_license = true;
allowUnfree = true;
};
};
androidSdk = pkgs.androidenv.androidPkgs_9_0.androidsdk;
in
{
devShell =
with pkgs; mkShell rec {
ANDROID_SDK_ROOT = "${androidSdk}/libexec/android-sdk";
buildInputs = [
flutter
androidsdk
jdk17
];
};
});
}
Run following commands to start a new demo project and run the "hello world" application
# nix develop
# flutter create my_app
# cd my_app
# flutter run
Emulators
View the Android wiki page for more info, but you can set up emulators in Android Studio, run them from there, then target the emulator in VSCode when running your flutter code. Otherwise, you can Nixify or even manually add your emulators as stated in the Android wiki page
Packaging
Use buildFlutterApplication from nixpkgs.
See also
- The team working on flutter in nixpkgs maintains several pieces of infrastructure related to the cause. The documentation is lacking as of now, but there are plans to improve it.