Flutter Chen Generator - Assets Generator

162 阅读3分钟

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.yamltrue
--no-update-pubspec-不更新pubspec.yamlfalse
--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.pnghomeIcon
  • assets/images/user/avatar.jpguserAvatar
  • assets/json/config.jsonjsonConfig

完整命名模式

  • assets/images/home/icon.pngimagesHomeIcon
  • assets/images/user/avatar.jpgimagesUserAvatar
  • assets/json/config.jsonjsonConfig

冲突处理

当同一文件夹存在同名不同扩展名文件时:

  • icon.pnghomeIcon (第一个保持原名)
  • icon.svghomeIconSvg (后续添加扩展名后缀)
  • icon.jpghomeIconJpg

智能驼峰处理

保持原有的驼峰格式:

  • inviteShare.pnghomeInviteShare (保持驼峰)
  • user_profile.pnghomeUserProfile (转换驼峰)

💡 使用技巧

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 切换到完整路径命名模式,或调整文件夹结构。