Flutter flutter_gen_runner总结

文章目录

Flutter flutter_gen_runner总结

概述

  • 所有资源文件夹 assets 目录必须放在项目根目录下,与 pubspec.yaml 同级。
  • Flutter 原生不支持 SVG 渲染 ,使用 SVG 必须依赖第三方库 flutter_svg。

原生资源方案

目录结构

plain 复制代码
flutter_project/
 ├─ pubspec.yaml
 ├─ assets/
 │   ├─ images/     # 存放 png/jpg 大图、背景图、内容图
 │   ├─ icons/      # 存放 SVG/透明PNG 图标、功能小图标
 │   └─ json/       # 存放本地配置JSON文件
 └─ lib/

添加依赖

加载 svg 图片需要添加依赖:

复制代码
dependencies:
  flutter_svg: ^2.0.9 # SVG必备依赖

配置pubspec.yaml

复制代码
flutter:
  uses-material-design: true
  assets:
    - assets/images/
    - assets/icons/
    - assets/json/

使用

使用 assets/images 下的图片:

dart 复制代码
Image.asset("assets/images/a.png"),
Image.asset("assets/images/b.png"),
Image.asset("assets/images/c.png"),

使用 assets/icons 下的图片和svg:

dart 复制代码
SvgPicture.asset(
  "assets/icons/settings.svg",
  width: 24,
  height: 24,
),
SvgPicture.asset(
  "assets/icons/settings.svg",
  width: 24,
  height: 24,
  colorFilter: ColorFilter.mode(Colors.blue, BlendMode.srcIn),
)

使用 assets/json 下的文件:

dart 复制代码
Future<String> loadLocalJson() async {
  return await rootBundle.loadString('assets/json/user.json');
}

flutter_gen_runner

自动扫描项目图片、SVG、字体、JSON 资源,自动生成类型安全的 Dart 常量:

淘汰原生写法:Image.asset("assets/xxx.png")

推荐 Gen 写法:Assets.images.xxx.path

核心优势:编译期报错、IDE自动补全、支持全局重构、零路径错误。

添加依赖

复制代码
dependencies:
  flutter_svg: ^2.0.9 # SVG必备依赖

dev_dependencies:
  build_runner: ^2.4.9
  flutter_gen_runner: ^5.6.0

生成资源代码

一次性生成:

复制代码
dart run build_runner build

监听资源,自动生成:

复制代码
dartrun build_runner watch

清理重建:

复制代码
dart run build_runner clean

使用

使用 assets/images 下的图片:

dart 复制代码
Image.asset(Assets.images.a.path),
Image.asset(Assets.images.b.path),
Image.asset(Assets.images.c.path),

使用 assets/icons 下的图片和svg:

dart 复制代码
SvgPicture.asset(
  Assets.icons.settings,
  width: 24,
  height: 24,
),
SvgPicture.asset(
  Assets.icons.settings,
  width: 24,
  height: 24,
  colorFilter: ColorFilter.mode(Colors.blue, BlendMode.srcIn),
),

使用 assets/json 下的文件:

dart 复制代码
Future<String> loadLocalJson() async {
  return await rootBundle.loadString(Assets.json.user);
}
相关推荐
君赏5 天前
棉宇宙 Flutter 热更新是如何落地的
flutter
恋猫de小郭5 天前
AndroidX 新增 Security State ,支持可编程的系统安全状态查询
android·前端·flutter
zihan5185 天前
自己做软件日记9/21 得到了一个良好的文件结构框架
后端·flutter·前端框架·android studio
ZFJ_张福杰6 天前
【Flutter】Flutter 中有哪些耗时操作?从 UI 卡顿到 Isolate 性能优化
flutter·性能优化·卡顿·isolate
sakiko_6 天前
Flutter:Dart学习笔记1:基础UI组件等
flutter
9765033357 天前
iOS 上架 4.3a 被拒【uniapp专讲】
flutter·ios·objective-c·uniapp·swift
传奇开心果编程7 天前
【Flutter入门练中学】第2课:布局系统
学习·flutter·ui
君赏7 天前
FlutterPatch:把 Shorebird 热更新的控制面搬回自己服务器
flutter
用户2181697049307 天前
Flutter tootip 轻量级提示
flutter
用户2181697049307 天前
Flutter 拖拽 Draggable DragTarget
flutter