Flutter图标字体插件flutter_sficon的使用

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

Flutter图标字体插件flutter_sficon的使用

Flutter SFIcon 是一个用于在 Flutter 应用中渲染 SF Symbols 图标的插件。它类似于常规的 Icon 小部件,并支持最新的 SF Symbols 版本 5.1。图标是可摇树优化的(tree shakable),并且 SFIcon 小部件基于 Text 小部件。

安装

flutter_sf_symbols 添加到您的 pubspec.yaml 文件中:

dependencies:
  flutter_sficon: ^latest_version

然后运行以下命令来安装依赖项:

flutter pub add flutter_sficon

如何使用

为了正确使用 Flutter 的摇树优化功能,所有图标都存储在 SFIcons 类中作为静态常量。获取 SF Symbol 的命名约定如下:

  1. SF Symbol 名称前缀为 sf_
  2. 点号(.)替换为下划线(_)。

示例

  • SF Symbol 0.circle 命名为 sf_0_circle
  • SF Symbol heart.fill 命名为 sf_heart_fill

以下是使用 SFIcon 的示例代码:

import 'package:flutter/material.dart';
import 'package:flutter_sficon/flutter_sficon.dart';

const SFIcon(
    SFIcons.sf_heart_fill, // 'heart.fill'
    fontSize: 40, // 使用 fontSize 而不是 size
    fontWeight: FontWeight.bold, // 使用 fontWeight 而不是 weight
    color: Colors.red,
);

重要事项

所有 SF Symbols 都应被视为由 Xcode 和 Apple SDK 许可协议定义的系统提供的图像,并受其中条款和条件的约束。您不得在应用程序图标、徽标或任何其他商标相关用途中使用 SF Symbols 或与之混淆的字形。Apple 有权审查并自行决定要求修改或停止使用违反上述限制的任何符号,并且您同意及时遵守任何此类请求。

完整示例 Demo

以下是一个完整的示例应用,展示了如何在 Flutter 应用中使用 flutter_sficon 插件:

import 'package:flutter/material.dart';
import 'package:flutter_sficon/flutter_sficon.dart';

void main() {
  runApp(const MyApp());
}

class MyApp extends StatelessWidget {
  const MyApp({super.key});

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple),
        useMaterial3: true,
      ),
      home: const MyHomePage(title: 'Flutter Demo Home Page'),
    );
  }
}

class MyHomePage extends StatefulWidget {
  const MyHomePage({super.key, required this.title});

  final String title;

  [@override](/user/override)
  State<MyHomePage> createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        backgroundColor: Theme.of(context).colorScheme.inversePrimary,
        title: Text(widget.title),
      ),
      body: Center(
        child: IconTheme(
          data: IconThemeData(color: Theme.of(context).colorScheme.primary),
          child: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            children: <Widget>[
              SFIcon(
                SFIcons.sf_chevron_backward,
                fontSize: 40,
                fontWeight: FontWeight.w100,
              ),
              SFIcon(
                SFIcons.sf_chevron_backward,
                fontSize: 40,
                fontWeight: FontWeight.w200,
              ),
              SFIcon(
                SFIcons.sf_chevron_backward,
                fontSize: 40,
                fontWeight: FontWeight.w300,
              ),
              SFIcon(
                SFIcons.sf_chevron_backward,
                fontSize: 40,
                fontWeight: FontWeight.w400,
              ),
              SFIcon(
                SFIcons.sf_chevron_backward,
                fontSize: 40,
                fontWeight: FontWeight.w500,
              ),
              SFIcon(
                SFIcons.sf_chevron_backward,
                fontSize: 40,
                fontWeight: FontWeight.w600,
              ),
              SFIcon(
                SFIcons.sf_chevron_backward,
                fontSize: 40,
                fontWeight: FontWeight.w700,
              ),
              SFIcon(
                SFIcons.sf_chevron_backward,
                fontSize: 40,
                fontWeight: FontWeight.w800,
              ),
              SFIcon(
                SFIcons.sf_chevron_backward,
                fontSize: 40,
                fontWeight: FontWeight.w900,
              ),
            ],
          ),
        ),
      ),
    );
  }
}

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

1 回复

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


当然,以下是如何在Flutter项目中使用flutter_sficon插件来集成和使用图标字体的一个详细代码示例。flutter_sficon是一个允许你使用自定义图标字体的Flutter插件。

1. 添加依赖

首先,在你的pubspec.yaml文件中添加flutter_sficon依赖:

dependencies:
  flutter:
    sdk: flutter
  flutter_sficon: ^x.y.z  # 请替换为最新版本号

然后运行flutter pub get来安装依赖。

2. 准备图标字体文件

确保你有一个.ttf(TrueType字体)文件,该文件包含你要使用的图标。假设文件名为icons.ttf

3. 创建图标映射文件

接下来,你需要创建一个映射文件,该文件将每个图标的Unicode码点映射到易于使用的名称。创建一个名为icon_font.dart的文件,并添加以下内容:

import 'package:flutter/material.dart';
import 'package:flutter_sficon/flutter_sficon.dart';

class IconFont {
  IconFont._();

  static const String fontFamily = 'IconFont';

  static const IconData home = IconData(0xe800, fontFamily: fontFamily);
  static const IconData settings = IconData(0xe801, fontFamily: fontFamily);
  // 继续添加其他图标
}

4. 将字体文件添加到项目中

将你的icons.ttf文件放在assets/fonts/目录下(如果没有这个目录,请创建它)。然后在pubspec.yaml文件中添加字体文件的引用:

flutter:
  fonts:
    - family: IconFont
      fonts:
        - asset: assets/fonts/icons.ttf

5. 使用图标

现在你可以在你的Flutter应用中使用这些图标了。以下是一个简单的示例,展示如何在按钮中使用这些图标:

import 'package:flutter/material.dart';
import 'icon_font.dart';  // 导入图标映射文件

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Flutter SFIcon Example'),
        ),
        body: Center(
          child: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            children: <Widget>[
              SFIcon(IconFont.home, size: 32, color: Colors.blue),
              SizedBox(height: 20),
              SFIcon(IconFont.settings, size: 32, color: Colors.green),
            ],
          ),
        ),
      ),
    );
  }
}

6. 运行应用

现在你可以运行你的Flutter应用,并查看自定义图标是否按预期显示。

总结

通过上述步骤,你可以成功地在Flutter项目中使用flutter_sficon插件来集成和使用图标字体。希望这个示例能帮助你理解如何在Flutter中集成和使用自定义图标字体。

回到顶部