Flutter资源生成插件flutter_gen_runner的使用
Flutter资源生成插件flutter_gen_runner的使用
简介
FlutterGen
是一个用于Flutter项目的代码生成工具,旨在为项目中的资源(如assets、fonts、colors等)提供类型安全的访问方式。通过它,你可以告别基于字符串的API,减少拼写错误带来的风险。
动机
直接使用资源路径字符串是不安全的做法:
# pubspec.yaml
flutter:
assets:
- assets/images/profile.jpg
❌ Bad 如果出现拼写错误将会导致运行时错误:
Widget build(BuildContext context) {
return Image.asset('assets/images/profile.jpeg'); // 错误的文件名
}
⭕️ Good 使用类型安全的方式:
Widget build(BuildContext context) {
return Assets.images.profile.image();
}
安装
Homebrew (适用于macOS和Linux)
brew install FlutterGen/tap/fluttergen
asdf (适用于macOS和Linux)
# 添加插件
asdf plugin add fluttergen
# 或者
asdf plugin add fluttergen https://github.com/FlutterGen/asdf-fluttergen.git
# 安装fluttergen
asdf install fluttergen latest
更多信息请参阅 FlutterGen/asdf-fluttergen
Pub Global (适用于macOS, Linux和Windows)
dart pub global activate flutter_gen
你可能需要配置你的PATH环境变量,请参考Dart官方文档
作为build_runner的一部分
- 将
build_runner
和flutter_gen_runner
添加到项目的pubspec.yaml
文件中:
dev_dependencies:
build_runner:
flutter_gen_runner:
- 安装依赖:
flutter pub get
- 使用
flutter_gen
:
dart run build_runner build
GitHub Actions (适用于macOS和Linux)
在GitHub Actions中使用:
- uses: FlutterGen/setup-fluttergen@v1
with:
version: ${{ fluttergen_version }}
更多信息请参阅 FlutterGen/setup-fluttergen
使用方法
在配置好 pubspec.yaml
后,运行以下命令:
fluttergen -h # 查看帮助信息
fluttergen -c example/pubspec.yaml # 根据指定的配置文件生成代码
配置文件
FlutterGen
根据 pubspec.yaml
中的 flutter
和 flutter_gen
部分生成 Dart 文件,默认配置可以在这里找到:默认配置
示例配置:
# pubspec.yaml
flutter_gen:
output: lib/gen/ # 可选,默认为lib/gen/
line_length: 80 # 可选,默认为80
integrations:
flutter_svg: true
flare_flutter: true
rive: true
lottie: true
colors:
inputs:
- assets/color/colors.xml
flutter:
uses-material-design: true
assets:
- assets/images/
fonts:
- family: Raleway
fonts:
- asset: assets/fonts/Raleway-Regular.ttf
- asset: assets/fonts/Raleway-Italic.ttf
style: italic
示例代码
下面是一个完整的示例代码,展示了如何使用 flutter_gen
来管理资源:
import 'package:flutter/material.dart';
import 'gen/assets.gen.dart';
import 'gen/colors.gen.dart';
import 'gen/fonts.gen.dart';
void main() async {
WidgetsFlutterBinding.ensureInitialized();
runApp(MaterialApp(
title: 'Flutter Demo',
theme: ThemeData(
fontFamily: MyFontFamily.raleway,
primarySwatch: MyColorName.crimsonRed,
),
home: Scaffold(
appBar: AppBar(
title: const Text('FlutterGen'),
),
body: Center(
child: SingleChildScrollView(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
SizedBox(
width: 200,
height: 200,
child: MyAssets.flare.penguin.flare(
animation: 'walk',
fit: BoxFit.contain,
),
),
SizedBox(
width: 200,
height: 200,
child: MyAssets.rive.vehicles.rive(
fit: BoxFit.contain,
),
),
SizedBox(
width: 200,
height: 200,
child: MyAssets.lottie.hamburgerArrow.lottie(
fit: BoxFit.contain,
),
),
SizedBox(
width: 200,
height: 200,
child: MyAssets.lottie.geometricalAnimation.lottie(
fit: BoxFit.contain,
),
),
SizedBox(
width: 200,
height: 200,
child: MyAssets.lottie.alarmClockLottieV440.lottie(
fit: BoxFit.contain,
),
),
MyAssets.images.chip1.image(),
Container(
height: 400,
decoration: BoxDecoration(
image: DecorationImage(
image: MyAssets.images.chip1.provider(),
),
),
child: const Center(child: Text('Deco')),
),
MyAssets.images.icons.kmm.svg(key: const Key("kmm_svg")),
MyAssets.images.icons.fuchsia.svg(),
MyAssets.images.icons.paint.svg(
width: 120,
height: 120,
),
Text(MyAssets.images.icons.kmm.path),
Text(MyAssets.images.icons.kmm.keyName),
Text(ResAssets.images.dart.path),
Text(ResAssets.images.dart.keyName),
ResAssets.images.flutter3.image(),
ResAssets.images.dart.svg(),
SizedBox(
width: 200,
height: 200,
child: ResAssets.images.skills.rive(
fit: BoxFit.contain,
),
),
SizedBox(
width: 200,
height: 200,
child: ResAssets.images.favorite.flare(
shouldClip: false,
),
),
SizedBox(
width: 200,
height: 200,
child: ResAssets.images.runningCarOnRoad.lottie(
fit: BoxFit.contain,
),
),
const Text(
'Hi there, I\'m FlutterGen',
style: TextStyle(
color: MyColorName.black60,
fontFamily: MyFontFamily.robotoMono,
fontFamilyFallback: [MyFontFamily.raleway],
),
),
],
),
),
),
),
));
}
这个例子展示了如何使用 flutter_gen
生成的资源类来加载图片、SVG、字体和颜色,并应用到UI组件中。希望这些内容能帮助你更好地理解和使用 flutter_gen
插件!
更多关于Flutter资源生成插件flutter_gen_runner的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter资源生成插件flutter_gen_runner的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
在Flutter项目中,flutter_gen_runner
是一个用于生成资源文件(如图片、字符串等)的插件。它通常与 flutter_gen
一起使用,以简化资源管理和访问。下面是一个关于如何使用 flutter_gen_runner
的代码案例。
1. 安装依赖
首先,你需要在 pubspec.yaml
文件中添加 flutter_gen
和 build_runner
的依赖:
dependencies:
flutter:
sdk: flutter
flutter_gen: ^x.y.z # 请替换为最新版本号
dev_dependencies:
build_runner: ^x.y.z # 请替换为最新版本号
然后运行 flutter pub get
来安装依赖。
2. 配置资源文件
假设你有一个名为 assets
的文件夹,里面包含一些图片资源,如 images/logo.png
。
在 pubspec.yaml
文件中声明这些资源:
flutter:
assets:
- assets/images/logo.png
3. 创建资源访问类(可选)
虽然 flutter_gen
可以自动生成资源访问代码,但为了展示如何使用,我们可以先创建一个简单的资源访问类(这个文件稍后将由 flutter_gen_runner
自动生成)。
例如,你可以手动创建一个 assets.dart
文件(这个文件之后会被自动生成的文件覆盖):
// assets.dart (这个文件会被自动生成的文件覆盖)
class Assets {
static const String logo = 'assets/images/logo.png';
}
4. 使用 flutter_gen_runner
生成代码
在项目的根目录下,打开终端并运行以下命令来生成资源访问代码:
flutter pub run build_runner build
这个命令会调用 flutter_gen_runner
来扫描你的 pubspec.yaml
文件中的资源声明,并生成相应的 Dart 文件。
5. 使用生成的资源访问代码
生成完成后,你应该会在项目的 lib/generated
文件夹下看到自动生成的文件(例如 assets.g.dart
)。这个文件包含了所有资源的访问代码。
你可以在你的 Flutter 应用中这样使用这些资源:
import 'package:your_app_name/generated/assets.g.dart';
// 使用生成的资源
Image(
image: AssetImage(Assets.images.logo),
)
6. 确保生成的代码被包含
为了确保生成的代码在构建时被包含,你可能需要在 .gitignore
文件中添加一行来忽略生成的文件夹:
# Ignore generated files
/lib/generated/
但注意,在发布应用时,你通常不需要将这些生成的代码提交到版本控制系统中,因为它们可以从你的源代码和资源文件中自动生成。
总结
通过上述步骤,你可以使用 flutter_gen_runner
来自动生成 Flutter 项目的资源访问代码。这不仅简化了资源管理,还提高了代码的可维护性和可读性。