Flutter图标字体生成插件icon_font_gen的使用
Flutter图标字体生成插件icon_font_gen的使用
将所有*.svg图标从目录转换为图标字体(.ttf),并生成与Flutter兼容的dart类。
该插件作为NodeJs包fantasticon
的抽象层。
要求
- Node.JS v11+
安装
$ pub global activate icon_font_gen
参数
--from
* - 输入包含svg文件的目录--out-font
* - 输出图标字体路径(例如:lib/font.ttf)--out-flutter
* - 输出Flutter图标类路径(例如:lib/icons.dart)--class-name
* - 类名也是在pubspec.yaml中使用的字体名称(作为字体名称)--height
- 固定字体高度值,默认值:512--descent
- 应用于基线的偏移量,默认值:240--package
- 生成图标数据的包名称--indent
- 生成dart文件的缩进,例如:’ ‘,默认值:’ ’--normalize
- 规范化图标大小,默认值:false--yarn
- 使用yarn代替npm,默认值:false--naming-strategy
- 图标名称策略:snake (yaru_icon) 或 camel (yaruIcon),默认值:snake
示例
文件结构
project
└───icons
│ │ account.svg
│ │ arrow_left.svg
│ │ arrow_right.svg
│ │ collection.svg
│
└───lib
│ │ icon_font
│ │ widgets
运行命令
$ icon_font_gen --from=icons --class-name=UiIcons --out-font=lib/icon_font/ui_icons.ttf --out-flutter=lib/widgets/icons.dart
生成结果
project
└───icons
│ │ account.svg
│ │ arrow_left.svg
│ │ arrow_right.svg
│ │ collection.svg
│
└───lib
│ └───widgets
│ | │ icons.dart
│ │
│ └───icon_font
│ │ ui_icons.ttf
生成的icons.dart
// 自动生成的代码 - 请勿手动修改
import 'package:flutter/widgets.dart';
@immutable
class _UiIconsData extends IconData {
const UiIconsData(int codePoint)
: super(
codePoint,
fontFamily: 'UiIcons',
);
}
@immutable
class UiIcons {
const UiIcons._();
static const IconData account = _UiIconsData(0xe000);
static const IconData arrowLeft = _UiIconsData(0xe001);
static const IconData arrowRight = _UiIconsData(0xe002);
static const IconData collection = _UiIconsData(0xe003);
}
在pubspec.yaml中添加字体
flutter:
fonts:
- family: UiIcons
fonts:
- asset: lib/src/icon_font/ui_icons.ttf
示例代码
import 'package:example/widgets/icons.dart';
import 'package:flutter/material.dart';
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
// 此小部件是您的应用的根。
[@override](/user/override)
Widget build(BuildContext context) => MaterialApp(
title: 'Flutter Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: MyHomePage(),
);
}
class MyHomePage extends StatelessWidget {
[@override](/user/override)
Widget build(BuildContext context) => Scaffold(
appBar: AppBar(
leading: Icon(UiIcons.account),
),
body: Padding(
padding: EdgeInsets.all(16),
child: Column(
children: [
UiIcons.account,
UiIcons.arrow_left,
UiIcons.collection,
UiIcons.arrow_right,
]
.map((iconData) => Padding(
padding: EdgeInsets.all(16),
child: Icon(iconData),
))
.cast<Widget>()
.toList(),
),
),
);
}
更多关于Flutter图标字体生成插件icon_font_gen的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter图标字体生成插件icon_font_gen的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,关于Flutter图标字体生成插件 icon_font_gen
的使用,这里是一个简单的代码案例来展示如何集成和使用这个插件。icon_font_gen
插件允许你从一组SVG图标生成一个Flutter可用的图标字体。
前提条件
- 确保你的Flutter开发环境已经正确设置。
- 你需要有一些SVG图标文件。
步骤
1. 添加依赖
首先,在你的 pubspec.yaml
文件中添加 icon_font_gen
依赖:
dependencies:
flutter:
sdk: flutter
icon_font_gen: ^x.y.z # 替换为最新版本号
dev_dependencies:
build_runner: ^x.y.z # 确保你有build_runner用于生成代码
然后运行 flutter pub get
来获取依赖。
2. 准备SVG图标
将你的SVG图标文件放在一个文件夹中,例如 assets/icons
。
3. 配置 pubspec.yaml
在 pubspec.yaml
中添加你的SVG图标到 flutter
的 assets
部分:
flutter:
assets:
- assets/icons/icon1.svg
- assets/icons/icon2.svg
- assets/icons/icon3.svg
4. 生成图标字体
在你的项目根目录下运行以下命令来生成图标字体文件和相关Dart代码:
flutter pub run icon_font_gen:main
这个命令会读取 assets/icons
目录下的SVG文件,并生成一个字体文件(通常是 .ttf
)和一些Dart代码。
5. 使用生成的图标
假设生成的图标类名为 MyIcons
,你可以在Flutter代码中使用这些图标:
import 'package:flutter/material.dart';
import 'package:your_app_name/generated/icon_font.dart'; // 确保路径正确
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text('Icon Font Demo'),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Icon(MyIcons.icon1),
Icon(MyIcons.icon2),
Icon(MyIcons.icon3),
],
),
),
),
);
}
}
在这个例子中,MyIcons.icon1
, MyIcons.icon2
, 和 MyIcons.icon3
是从SVG文件生成的图标标识符。
注意事项
- 确保
build_runner
正常工作,有时需要清理和重新获取依赖。 - 检查生成的
icon_font.dart
文件的位置,并根据实际情况调整导入路径。 - 生成的图标字体文件名和类名可能有所不同,具体取决于你的配置和
icon_font_gen
插件的版本。
这个代码案例展示了如何从SVG图标生成Flutter可用的图标字体,并在Flutter应用中使用这些图标。希望这对你有所帮助!