Flutter SVG转换到图标字体插件svg_fetch_to_icon_font的使用
Flutter SVG转换到图标字体插件svg_fetch_to_icon_font的使用
svg_fetch_to_icon_font
是一个强大的命令行工具,可以从Figma获取SVG图标并将其转换为图标字体,同时处理Figma变量以生成Flutter主题文件。
特性
- 🔄 通过Figma API直接从Figma获取SVG图标
- 🎨 将SVG转换为图标字体,并生成对应的Flutter类
- 🎯 从Figma变量生成Flutter主题文件
- 📥 支持PDF和SVG图标下载
- 📝 详细的操作日志记录
图标下载类型
该工具支持两种从Figma下载图标的模式:
-
直接SVG下载(推荐)
- 更快的处理速度
- 更高的质量
- 使用
--direct-svg
标志 - 需要Figma专业计划
# macOS brew install pdf2svg # Linux sudo apt-get install pdf2svg # Windows # 下载地址: http://www.cityinthesky.co.uk/opensource/pdf2svg/
-
PDF下载(默认)
- 适用于所有Figma计划
- 自动将PDF转换为SVG
- 稍微慢一些的处理速度
- 需要安装
pdf2svg
# macOS brew install pdf2svg # Linux sudo apt-get install pdf2svg # Windows # 下载地址: http://www.cityinthesky.co.uk/opensource/pdf2svg/
安装
dart pub global activate svg_fetch_to_icon_font
分步指南
1. 获取你的Figma访问令牌
- 登录到你的Figma账户
- 转到设置 > 账户设置
- 在个人访问令牌部分,点击“创建新令牌”
- 复制你的访问令牌用于命令中
2. 查找你的Figma文件和节点ID
- 打开包含图标的Figma文件
- 文件ID在URL中:
https://www.figma.com/file/XXXXXX/...
(XXXXXX是你的文件ID) - 右键点击包含图标的框架
- 选择“复制/粘贴为” → “复制链接”
- 节点ID是复制链接中
node-id=
后面的部分
3. 设置你的项目
- 创建一个目录作为你的图标字体项目
- 如果需要,初始化一个新的Flutter/Dart项目
- 创建一个输出目录以存放生成的文件
使用示例
图标字体生成与不同下载类型
# 使用PDF下载生成图标字体(默认)
svg_fetch_to_icon_font icons \
--token YOUR_FIGMA_TOKEN \
--file abc123xyz \
--node 456:789 \
--output ./lib/icons
# 使用直接SVG下载生成图标字体
svg_fetch_to_icon_font icons \
--token YOUR_FIGMA_TOKEN \
--file abc123xyz \
--node 456:789 \
--output ./lib/icons \
--direct-svg
主题生成自变量
# 从Figma变量生成主题文件
svg_fetch_to_icon_font variables \
--token YOUR_FIGMA_TOKEN \
--file abc123xyz \
--output ./lib/theme
# 清理输出
svg_fetch_to_icon_font variables \
--token YOUR_FIGMA_TOKEN \
--file abc123xyz \
--output ./lib/theme \
--clean
输出文件结构
运行命令后,你将得到以下文件结构:
your_project/
├── lib/
│ ├── icons/
│ │ ├── icons.ttf # 生成的图标字体文件
│ │ ├── icons.dart # Flutter图标类定义
│ │ ├── pdf/ # (如果使用默认PDF下载)
│ │ │ ├── icon1.pdf
│ │ │ └── icon2.pdf
│ │ └── svg/ # (最终SVG文件,无论哪种方法)
│ │ ├── icon1.svg
│ │ ├── icon2.svg
│ │ └── ...
│ └── theme/ # (如果使用变量命令)
│ ├── colors.dart # 颜色定义
│ ├── typography.dart # 文本样式定义
│ └── theme.dart # 主题配置
使用生成的图标在Flutter中
import 'package:your_project/icons/icons.dart';
// 在小部件中使用图标
Icon(MyIcons.menu)
Icon(MyIcons.search, size: 24.0, color: Colors.blue)
使用生成的主题
import 'package:your_project/theme/theme.dart';
// 在MaterialApp中使用
MaterialApp(
theme: AppTheme.light(),
darkTheme: AppTheme.dark(),
// ...
)
要求
- Dart SDK >=2.19.0 <4.0.0
- Flutter(用于主题生成)
- icon_font_generator(自动安装)
开发
要为这个包贡献代码:
- 克隆仓库
- 安装依赖:
dart pub get
- 运行测试:
dart test
更多关于Flutter SVG转换到图标字体插件svg_fetch_to_icon_font的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter SVG转换到图标字体插件svg_fetch_to_icon_font的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
svg_fetch_to_icon_font
是一个用于将 SVG 图标转换为图标字体的 Flutter 插件。这个插件可以帮助开发者将 SVG 文件打包成字体文件,并在 Flutter 应用中使用这些字体作为图标。
以下是使用 svg_fetch_to_icon_font
插件的步骤:
1. 添加依赖
首先,你需要在 pubspec.yaml
文件中添加 svg_fetch_to_icon_font
插件的依赖:
dev_dependencies:
svg_fetch_to_icon_font: ^0.0.1
然后运行 flutter pub get
来获取依赖。
2. 配置插件
在项目的根目录下创建一个 icon_font_config.yaml
文件,用于配置 SVG 图标的来源和输出的字体文件路径。
# icon_font_config.yaml
svg_paths:
- assets/svg/icons/ # SVG 图标所在的目录
output_font_path: lib/fonts/icon_font.ttf # 输出的字体文件路径
output_icon_metadata: lib/fonts/icon_font.dart # 输出的图标元数据文件路径
3. 运行插件
在终端中运行以下命令来生成图标字体文件和元数据文件:
flutter pub run svg_fetch_to_icon_font
这个命令会根据 icon_font_config.yaml
中的配置,将指定的 SVG 图标转换为字体文件,并生成一个包含图标映射的 Dart 文件。
4. 在 Flutter 应用中使用生成的图标字体
生成的 icon_font.dart
文件会包含一个 IconFont
类,其中包含了所有图标的映射。你可以在你的 Flutter 应用中使用这些图标。
import 'package:flutter/material.dart';
import 'fonts/icon_font.dart'; // 导入生成的图标字体文件
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text('SVG to Icon Font Example'),
),
body: Center(
child: Icon(
IconFont.icon_name, // 使用生成的图标
size: 48.0,
color: Colors.blue,
),
),
),
);
}
}
void main() => runApp(MyApp());
5. 更新字体文件
如果你在 assets/svg/icons/
目录中添加或删除了 SVG 文件,只需再次运行 flutter pub run svg_fetch_to_icon_font
命令来更新字体文件和元数据文件。
注意事项
- 确保你的 SVG 文件是有效的,并且不包含不支持的特性。
- 生成的字体文件需要添加到
pubspec.yaml
中的fonts
部分:
flutter:
fonts:
- family: IconFont
fonts:
- asset: lib/fonts/icon_font.ttf