Modern, type-safe generated bindings for accessing your Flutter assets.
- Custom prefixes for generated classes.
- Option for generating additional utilities.
- Option for generating assets as package dependency.
- Support for 3rd party packages such as
flutter_svg
andlottie
. - Support for themes.
Using raw strings to access assets is error-prone. Suppose you define an image in your pubspec.yaml:
flutter:
assets:
- assets/images/foo.png
And you access in your application:
Widget build(BuildContext context) => Image.asset('assets/images/foo.png');
What if you:
- Change the name of the image?
- Change the location of the image?
- Delete the image?
- Misspell the path?
The above code snippet now throws an exception. You won't know either unless you re-run the widget.
Nitrogen generates bindings that are safe:
Widget build(BuildContext context) => Assets.images.foo();
3rd party packages are supported via 'extension' packages. extension
packages contain an extension
that provide a
call(...)
function that transforms an Asset
into a 3rd party type.
Type | Package | Extension Package | Version |
---|---|---|---|
SVG images | flutter_svg |
nitrogen_flutter_svg |
|
Lottie animations | lottie |
nitrogen_lottie |
Install the following:
dependencies:
nitrogen_types: <version>
nitrogen_flutter_svg: <version> # Optional: include when using SVG images
nitrogen_lottie: <version> # Optional: include when using Lottie animations
dev_dependencies:
build_runner: <version>
nitrogen: <version>
Alternatively:
# Include nitrogen_flutter_svg and nitrogen_lottie when using SVG images and Lottie animations respectively.
dart pub add nitrogen_types nitrogen_flutter_svg nitrogen_lottie
dart pub add --dev build_runner nitrogen
To generate bindings:
dart run build_runner build
Nitrogen's configuration can be set in the nitrogen
section of your build.yaml. In most cases, the default
configuration works out of the box.
A simple configuration looks like:
targets:
$default:
builders:
nitrogen:
options:
package: true
docs: false
prefix: 'MyPrefix'
key: file-name
assets:
output: 'lib/src/assets.nitrogen.dart'
themes:
output: 'lib/src/asset_themes.nitrogen.dart'
fallback: assets/themes/light
Optional. Defaults to false
. Controls whether to generate assets as a package dependency. This should be true
if
you're bundling assets for other projects to use, i.e. forui-assets.
Optional. Defaults to true
. Controls whether to generate docs alongside the classes.
Optional. Defaults to an empty string. Controls generated classes' prefixes. Given 'MyPrefix', the generated classes will look like:
class MyPrefixAssets {
const MyPrefixAssets();
static const Map<String, Asset> contents = {};
static $MyPrefixAssetsIcons get icons => const $MyPrefixAssetsIcons();
}
Optional. Defaults to file
. Controls the generated assets' key parameters. The following options are supported:
Option | Description | Path | Generated Key |
---|---|---|---|
file-name | file name, without the extension | assets/images/foo.png |
foo |
grpc-enum | parent directory and file name, without the extension | assets/images/foo.png |
IMAGES_FOO |
Optional. Controls the location of the generated assets file.
assets:
# Path to the generated assets file. Relative to the project root. Defaults to `lib/src/assets.nitrogen.dart`.
output: lib/src/my/path/assets.nitrogen.dart
Optional. Defaults to null
. Controls whether to generate an additional asset_themes.nitrogen.dart
file. Useful for
working with theme-specific assets.
themes:
# Path to the generated themes file. Relative to the project root. Defaults to `lib/src/asset_themes.nitrogen.dart`.
output: lib/src/my/path/assets_themes.nitrogen.dart
# Path to fallback theme, relative to package root. Assumes that all themes are under 'assets/themes'.
fallback: assets/themes/light