flex_theme_gen 1.0.4 copy "flex_theme_gen: ^1.0.4" to clipboard
flex_theme_gen: ^1.0.4 copied to clipboard

Generate Flutter theme code from design tokens (YAML/JSON).

🌈 Flutter 主题生成系统 #

版本: 1.0.0

作者: Aiwen

功能: 通过 YAML 配置文件自动生成 Flutter 主题代码,支持链式调用(Padding / Radius / Bg / Border / Font),自动继承圆角,可自定义前缀(如 tw)。


flex_theme_gen 是一个 Flutter CLI 工具,通过 YAML 文件(设计 Tokens)自动生成完整的主题代码,包括:

  • AppColors(明暗主题)
  • Tokens(Spacing、Radius、Shadow、Border)
  • Typography(字体体系)
  • Tailwind 风格链式 UI 扩展(可配置前缀)

生成的代码可直接用于 Flutter 工程,无需手写主题类。


⚙️ 二、安装与运行 #

🔧 安装(本地或全局) #

dart pub global activate flex_theme_gen

然后直接运行:

gen_flex_theme build

或者在项目中使用:

dart run flex_theme_gen:gen_flex_theme build

🧭 CLI 参数说明 #

参数 说明
--input 指定 design_tokens.yaml 的路径
--out 指定生成文件输出目录
--watch 监听文件变动自动重新生成

📁 三、YAML 配置示例(design_tokens.yaml) #

fontsPackage: res
fonts:
  number: InterRes
  english: Roboto
  normal: Noto Sans SC

colors:
  light:
    colorFF33A9FF: FF33A9FF
    colorFF091C3D: FF091C3D
  dark:
    colorFF33A9FF: FF33A9FF
    colorFF091C3D: FF091C3D

tokens:
  prefix: tw   # 链式扩展方法前缀,可自定义
  spacing:
    2: 2
    4: 4
    6: 6
    8: 8
  radius:
    4: 4
    8: 8
    12: 12
  shadow:
    2: 2
    8: 8
  misc:
    blurSm: 2
    opacityDisabled: 0.5
  border:
    default:
      colorToken: colorFF33A9FF
      width: 1
    2: 2
    4: 4
    6: 6

typography:
  number:
    fontFamilyToken: number
    sizes:
      16R: { fontSize: 16, fontWeight: w400, lineHeight: 16 }
      16B: { fontSize: 16, fontWeight: w700, lineHeight: 16 }

📦 三方字体加载示例 #

在 pubspec.yaml 中注册第三方字体,以便 flex_theme_gen 的 Typography 自动识别:

flutter:
  fonts:
    - family: InterRes
      fonts:
        - asset: assets/fonts/Inter_24pt-Regular.ttf
          weight: 400
        - asset: assets/fonts/Inter_24pt-Bold.ttf
          weight: 700

在 design_tokens.yaml 中引用时:

fonts:
  number: InterRes     # 对应上面注册的 family 名称

这样 Typography 会自动生成:

TextStyles.number_16R
TextStyles.number_16B

🧱 四、在 pubspec.yaml 中配置 flex_theme_gen #

flex_theme_gen 支持在 pubspec.yaml 中声明输入输出路径,类似于 flutter_gen。

✅ 示例: #

dev_dependencies:
  flex_theme_gen:

flutter:
  assets:
    - apps_config/design_tokens.yaml

flex_theme_gen:
  input: apps_config/design_tokens.yaml   # 输入路径
  output: lib/generated/                  # 输出路径(生成的 .g.dart 文件)

然后直接执行:

dart run flex_theme_gen:gen_flex_theme build

⚙️ 优先级规则:

1.命令行参数最高(--input、--out)

2.其次是 pubspec.yaml 中的配置

3.最后才使用默认值(apps_config/design_tokens.yaml → output/)


🧩 五、生成文件一览 #

文件名 内容
app_colors.g.dart 明/暗主题颜色定义
tokens.g.dart Spacing / Radius / Shadow / Misc / Border 常量
${prefix}_alias.g.dart 链式 UI 扩展(Padding / Radius / Bg / Border)
fonts.g.dart 字体定义
${prefix}_font.g.dart 字体链式扩展
typography.g.dart Typography 定义
typography_resolved.g.dart 可直接应用的 TextStyle

🧩 六、链式调用(Tailwind 风格) #

生成的 ${prefix}_alias.g.dart 提供链式构建方法。

前缀可自定义(默认为 tw)。

🔧 示例 #

Text(
  '注册',
  style: TextStyles.normal_P2_B.copyWith(
    color: colors.colorFFFFFFFF,
  ),
)
    .twPHx8()               // 横向 padding
    .twPVy6()               // 纵向 padding
    .twBg(colors.colorFF33A9FF) // 背景色
    .twRounded4()           // 圆角裁剪
    .onTap(() {
      print('注册点击');
    });

📚 支持方法总览 #

分类 方法 功能说明
Padding .twP(double v) padding: all
.twPHx(double v) / .twPVy(double v) 横向 / 纵向 padding
.twP4() .twPHx8() .twPVy16() 使用 Tokens.spacingXX
Radius .twRounded4() ClipRRect 裁剪圆角
.twRadius4() DecoratedBox 视觉圆角
Background .twBg(Color color) 设置背景色
Border .twBorder({Color? color, double? width, double? radius}) 默认边框(支持继承圆角)
.twBorder2() .twBorder4() 使用 Tokens.borderXX

.twBorder() 会自动检测并继承前面的 .twRadiusXX() 圆角值。


🚀 七、命令示例 #

一次性生成:

gen_flex_theme build --input apps_config/design_tokens.yaml --out output

持续监听:

gen_flex_theme watch --input apps_config/design_tokens.yaml --out output

或使用 pubspec.yaml 中的配置:

dart run flex_theme_gen:gen_flex_theme build

🔍 八、常见问题(FAQ) #

问题 说明 解决方案
字体样式不变 未注册字体 检查 pubspec.yaml 与 design_tokens.yaml 字体 family 是否一致
Font family not found 路径或 family 错误 打开 .ttf 验证
明暗模式不切换 Theme 未绑定 确保使用 AppColors.light() / AppColors.dark()
Border 无法继承圆角 使用 .twRadius() 而非 .twRounded() .twBorder() 会自动检测 .twRadiusXX() 设置的圆角
命令无效 未正确配置 pubspec.yaml 检查 flex_theme_gen 字段是否正确缩进在根级

🏁 九、总结 #

✅ YAML 驱动的主题生成系统

✅ 支持 Prefix(如 tw、fx)

✅ 一键生成 Colors / Tokens / Typography / Fonts

✅ Tailwind 风格链式扩展(Padding / Radius / Bg / Border)

✅ 边框自动继承圆角

✅ 模板系统可拓展

✅ 支持在 pubspec.yaml 中声明输入/输出路径

✅ 支持第三方字体加载与映射

让 Flutter 主题开发进入

全自动 · 结构化 · 可维护时代 🚀


1
likes
125
points
--
downloads

Publisher

unverified uploader

Weekly Downloads

Generate Flutter theme code from design tokens (YAML/JSON).

Repository (GitHub)
View/report issues

Topics

#flutter #cli #design-tokens #theming

Documentation

API reference

License

unknown (license)

Dependencies

args, path, yaml

More

Packages that depend on flex_theme_gen