Flutter Chen Generator
🚀 一个强大的Flutter代码生成工具包,包含多个实用的代码生成器。
✨ 功能特性
📁 资源生成器 (Assets Generator)
- 🔄 自动扫描assets目录并生成Dart常量
- 🧠 智能驼峰命名转换,保持原有驼峰格式
- 🔧 处理文件命名冲突(同名不同扩展名)
- 📝 自动更新pubspec.yaml配置
🎨 图标字体生成器 (IconFont Generator)
- 📄 解析iconfont.json文件自动生成Dart图标常量
- 🏷️ 智能命名转换(支持横线转驼峰)
- 🔧 支持多种JSON格式(iconfont.cn、自定义格式等)
- 🎯 类型安全的IconData常量
🔮 未来计划
- 🌐 国际化自动化脚本: 自动把项目国际化、导入导出excel
- 📱 ScreenUtil自动化脚本: 自动智能添加ScreenUtil后缀
🚀 快速开始
安装
dart pub global activate flutter_chen_generator
📁 Flutter Assets Generator
自动生成Flutter资源文件索引并更新pubspec.yaml配置的工具。
✨ 功能特性
- 🔄 自动扫描assets目录并生成Dart常量
- 🧠 智能驼峰命名转换,保持原有驼峰格式
- 🔧 处理文件命名冲突(同名不同扩展名)
- 📝 自动更新pubspec.yaml配置
- 🚫 支持忽略指定文件夹
- ⚙️ 丰富的命令行参数配置
- 📦 支持短命名和完整路径命名两种模式
🚀 使用方法
基本使用
# 使用默认配置
flutter_chen_assets
# 或通过主入口
flutter_chen_generator assets
高级配置
flutter_chen_assets \
--assets-dir my_assets \
--output lib/my_assets.dart \
--class-name MyAssets \
--full-naming \
--ignore web,fonts,temp
📋 命令行参数
| 参数 | 短参数 | 说明 | 默认值 |
|---|---|---|---|
--assets-dir | -a | 资源目录 | assets |
--output | -o | 输出文件 | lib/generated/assets.dart |
--class-name | -c | 类名 | Assets |
--short-naming | - | 简短命名 | true |
--full-naming | - | 完整命名 | false |
--ignore | -i | 忽略文件夹 | 无 |
--update-pubspec | - | 更新pubspec.yaml | true |
--no-update-pubspec | - | 不更新pubspec.yaml | false |
--help | -h | 帮助信息 | - |
📂 生成示例
文件结构
assets/
├── images/
│ ├── home/
│ │ ├── icon.png
│ │ └── icon.svg
│ └── user/
│ └── avatar.jpg
└── json/
└── config.json
生成的代码 (短命名模式)
/// 自动生成的资源文件索引,请勿手动修改此文件
/// Generated by flutter_chen_assets_generator
class Assets {
Assets._();
static const String homeIcon = 'assets/images/home/icon.png';
static const String homeIconSvg = 'assets/images/home/icon.svg';
static const String jsonConfig = 'assets/json/config.json';
static const String userAvatar = 'assets/images/user/avatar.jpg';
}
更新的pubspec.yaml
flutter:
assets:
- assets/
- assets/images/
- assets/images/home/
- assets/images/user/
- assets/json/
🎯 命名规则
短命名模式(默认)
assets/images/home/icon.png→homeIconassets/images/user/avatar.jpg→userAvatarassets/json/config.json→jsonConfig
完整命名模式
assets/images/home/icon.png→imagesHomeIconassets/images/user/avatar.jpg→imagesUserAvatarassets/json/config.json→jsonConfig
冲突处理
当同一文件夹存在同名不同扩展名文件时:
icon.png→homeIcon(第一个保持原名)icon.svg→homeIconSvg(后续添加扩展名后缀)icon.jpg→homeIconJpg
智能驼峰处理
保持原有的驼峰格式:
inviteShare.png→homeInviteShare(保持驼峰)user_profile.png→homeUserProfile(转换驼峰)
💡 使用技巧
1. CI/CD 集成
# .github/workflows/flutter.yml
- name: Generate Assets
run: flutter_chen_assets --no-update-pubspec
2. 忽略特定文件夹
# 忽略web相关文件
flutter_chen_assets --ignore web,fonts,node_modules
3. 多项目配置
# 项目A
flutter_chen_assets -a assets -o lib/assets.dart
# 项目B
flutter_chen_assets -a resources -o lib/resources.dart -c Resources
4. 在代码中使用
import 'package:flutter/material.dart';
import 'generated/assets.dart';
class MyWidget extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Column(
children: [
// 使用图片资源
Image.asset(Assets.homeIcon),
// 使用JSON资源
FutureBuilder(
future: rootBundle.loadString(Assets.jsonConfig),
builder: (context, snapshot) {
// 处理JSON数据
return Text(snapshot.data ?? '');
},
),
],
);
}
}
🔧 常见问题
Q: 为什么某些文件夹被忽略了?
A: 检查 --ignore 参数或默认忽略列表。默认会忽略常见的非资源文件夹。
Q: 如何处理命名冲突?
A: 工具会自动处理同名不同扩展名的文件,第一个文件保持原名,后续文件添加扩展名后缀。
Q: pubspec.yaml 没有更新?
A: 确保没有使用 --no-update-pubspec 参数,并且有足够的文件权限。
Q: 生成的常量名不符合预期?
A: 可以使用 --full-naming 切换到完整路径命名模式,或调整文件夹结构。