Flutter图标字体生成插件icon_font_gen的使用

发布于 1周前 作者 songsunli 来自 Flutter

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

1 回复

更多关于Flutter图标字体生成插件icon_font_gen的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,关于Flutter图标字体生成插件 icon_font_gen 的使用,这里是一个简单的代码案例来展示如何集成和使用这个插件。icon_font_gen 插件允许你从一组SVG图标生成一个Flutter可用的图标字体。

前提条件

  1. 确保你的Flutter开发环境已经正确设置。
  2. 你需要有一些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图标到 flutterassets 部分:

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应用中使用这些图标。希望这对你有所帮助!

回到顶部