Flutter字体管理插件fontresoft的使用

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

Flutter字体管理插件 fontresoft 的使用

FontResoft 是一个全面的 Flutter 字体包,旨在为开发者提供多样化的精美字体,以构建视觉吸引力强且引人入胜的 Flutter 应用程序。通过提供多种现成的字体族和字重,FontResoft 简化了将自定义排版集成到 Flutter 项目中的过程。

目录

安装

要在您的 Flutter 项目中使用 FontResoft,请在 pubspec.yaml 文件中添加以下内容:

dependencies:
  fontresoft: ^0.0.5

然后运行:

flutter pub get

使用方法

导入该包:

import 'package:fontresoft/fontresoft.dart';

以下是如何在 main.dart 文件中使用的示例:

ThemeData(
    useMaterial3: true,
    brightness: Brightness.light,
    colorSchemeSeed: Colors.purpleAccent,
    fontFamily: FontResoft.poppins,
    package: FontResoft.package,
    highlightColor: Colors.transparent,
    splashColor: Colors.transparent,
);

以下是 Dart 代码中如何使用的一些示例:

Text(
  'Sample Text',
  style: Font.sourceSans().copyWith(
    fontSize: 23,
    color: color.withOpacity(1),
  ),
);

Text(
  Font.sourceSans().getFontName,
  style: Font.sourceSans(
    style: TextStyle(
      fontSize: 23,
      color: color.withOpacity(1),
    ),
  ),
);

更多示例可参考 main.dart 文件。

完整示例 Demo

以下是一个完整的示例,展示了如何使用 FontResoft 在应用中显示不同的字体样式,并允许用户交互更改字体样式(如加粗、斜体)。

import 'dart:math';
import 'package:flutter/material.dart';
import 'package:fontresoft/fontresoft.dart';

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

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

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      debugShowCheckedModeBanner: false,
      theme: ThemeData(
        useMaterial3: true,
        brightness: Brightness.dark,
        colorSchemeSeed: Colors.purpleAccent,
        fontFamily: FontResoft.poppins,
        package: FontResoft.package,
        highlightColor: Colors.transparent,
        splashColor: Colors.transparent,
      ),
      home: const MyHomePage(title: 'Flutter Demo Home Page'),
    );
  }
}

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

  final String title;

  @override
  State<MyHomePage> createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  final List<TextStyle> list = [
    Font.inconsolata(),
    Font.inter(),
    Font.lato(),
    Font.oswald(),
    Font.poppins(),
    Font.quicksand(),
    Font.robotoCondensed(),
    Font.shantellSans(),
    Font.sourceSans(),
    Font.sFProDisplay(),
    Font.sFProText(),
    Font.comfortaa(),
  ];

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text('FontResoft Fonts'),
        backgroundColor: Colors.black87,
        centerTitle: true,
      ),
      body: Center(
        child: ListView.builder(
          itemCount: list.length,
          itemBuilder: (context, index) {
            var color = Color.fromRGBO(
              Random().nextInt(255),
              Random().nextInt(255),
              Random().nextInt(255),
              1,
            );
            return GestureDetector(
              onTap: () {
                Navigator.of(context).push(
                  MaterialPageRoute(
                    builder: (context) => SecondPage(font: list[index]),
                  ),
                );
              },
              child: Card(
                elevation: 0,
                color: color.withOpacity(0.3),
                margin: const EdgeInsets.all(16),
                child: SizedBox(
                  width: double.infinity,
                  height: 100,
                  child: Center(
                    child: Column(mainAxisAlignment: MainAxisAlignment.center, children: [
                      Text(
                        list[index].getFontName,
                        style: list[index].copyWith(
                          fontSize: 23,
                          color: color.withOpacity(1),
                        ),
                      ),
                      Text(
                        '${list[index].fontFamily}',
                        style: list[index].copyWith(
                          fontSize: 20,
                          color: color.withOpacity(0.5),
                          fontStyle: FontStyle.italic,
                        ),
                      ),
                      Text(
                        '$color',
                        style: list[index].copyWith(
                          fontSize: 16,
                          color: color.withOpacity(0.5),
                          fontStyle: FontStyle.italic,
                        ),
                      ),
                    ]),
                  ),
                ),
              ),
            );
          },
        ),
      ),
    );
  }
}

class SecondPage extends StatefulWidget {
  const SecondPage({super.key, required this.font});

  final TextStyle font;

  @override
  State<SecondPage> createState() => _SecondPageState();
}

class _SecondPageState extends State<SecondPage> {
  static const String paragraph =
      'Lorem ipsum dolor sit amet, consectetur adipiscing elit. '
      'Nullam vel quam ac elit consequat laoreet...'; // 省略部分文本

  late TextStyle style;

  @override
  void initState() {
    super.initState();
    style = widget.font.copyWith(fontSize: 14);
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
          title: Text(widget.font.getFontName, style: widget.font),
          backgroundColor: Colors.black87),
      body: SizedBox(
        child: Column(
          children: [
            Container(
              height: MediaQuery.of(context).size.height - 220,
              margin: const EdgeInsets.all(16),
              child: SingleChildScrollView(
                child: Text(paragraph, style: style),
              ),
            ),
            const Divider(color: Colors.white24),
            Expanded(
              child: Row(
                  mainAxisAlignment: MainAxisAlignment.spaceEvenly,
                  children: [
                    boldStyleButton(),
                    italicStyleButton(),
                    OutlinedButton(
                        onPressed: () => increaseFont(),
                        child: const Icon(Icons.plus_one)),
                    OutlinedButton(
                        onPressed: () => decreaseFont(),
                        child: const Icon(Icons.exposure_minus_1)),
                  ]),
            ),
          ],
        ),
      ),
    );
  }

  ButtonStyleButton boldStyleButton() =>
      style.fontWeight != FontWeight.bold
          ? OutlinedButton(
              onPressed: () => transformBold(),
              child: const Text('Bold'),
            )
          : FilledButton(
              onPressed: () => transformBold(),
              child: const Text('Bold'),
            );

  ButtonStyleButton italicStyleButton() =>
      style.fontStyle != FontStyle.italic
          ? OutlinedButton(
              onPressed: () => transformItalic(),
              child: const Text('Italic'),
            )
          : FilledButton(
              onPressed: () => transformItalic(),
              child: const Text('Italic'),
            );

  transformBold() {
    setState(() {
      style = style.fontWeight != FontWeight.bold
          ? style.copyWith(fontWeight: FontWeight.bold)
          : style.copyWith(
              fontWeight: FontWeight.normal,
            );
    });
  }

  transformItalic() {
    setState(() {
      style = style.fontStyle != FontStyle.italic
          ? style.copyWith(fontStyle: FontStyle.italic)
          : style.copyWith(
              fontStyle: FontStyle.normal,
            );
    });
  }

  increaseFont() {
    double size = style.fontSize!;
    setState(() {
      style = style.copyWith(fontSize: size + 1);
    });
  }

  decreaseFont() {
    double size = style.fontSize!;
    setState(() {
      style = style.copyWith(fontSize: size - 1);
    });
  }
}

特性

  • 多样化的字体集合FontResoft 提供丰富的字体族,包括 Inconsolata、Inter、Lato、Oswald、Poppins、Quicksand、Roboto Condensed、ShantellSans 和 SourceSansPro。
  • 易于集成:通过简化实现过程,使开发者能够轻松访问并使用这些字体。
  • 多种字重和样式:每个字体族都包含多个字重和样式,帮助开发者增强排版多样性。
  • 本地字体加载:所有字体都在包内本地存储,确保一致性和性能。

示例

更多示例请参见 GitHub 上的完整示例

截图

Screenshot 1 Screenshot 2 Screenshot 3

贡献

如果您有任何问题、功能请求或改进建议,请在 GitHub 仓库中打开 issue 或提交 pull request。

许可证

该项目根据 BSD 3-Clause 许可证进行许可。详情请参阅 LICENSE 文件


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

1 回复

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


在Flutter中,flutter_font_awesome 或类似的插件(注意:fontresoft 似乎是一个拼写错误,我假设你指的是类似的功能或插件,这里以 flutter_font_awesome 为例,因为这是一个流行的字体管理插件)可以用来方便地管理和使用图标字体。虽然 flutter_font_awesome 主要用于 Font Awesome 图标集,但原理适用于大多数字体管理插件。

下面是如何在 Flutter 项目中使用 flutter_font_awesome 插件的一个示例。

1. 添加依赖

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

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

然后运行 flutter pub get 来获取依赖。

2. 导入插件

在你的 Dart 文件中导入插件:

import 'package:flutter_font_awesome/flutter_font_awesome.dart';

3. 使用图标

现在你可以在你的 Flutter 应用中使用 Font Awesome 图标了。下面是一个简单的例子,展示如何在 IconButton 中使用图标:

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

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Font Awesome Example'),
        ),
        body: Center(
          child: IconButton(
            icon: FontAwesomeIcons.heart, // 使用 Font Awesome 图标
            color: Colors.red,
            onPressed: () {
              // 点击事件处理
              ScaffoldMessenger.of(context).showSnackBar(
                SnackBar(content: Text('Heart icon pressed!')),
              );
            },
          ),
        ),
      ),
    );
  }
}

在这个例子中,我们创建了一个简单的 Flutter 应用,其中包含一个 IconButton,按钮上显示了 Font Awesome 的心形图标。当用户点击按钮时,会显示一个 snack bar。

4. 自定义图标大小和颜色

你可以通过 Icon 组件的 sizecolor 属性来自定义图标的大小和颜色:

Icon(
  FontAwesomeIcons.star, // 星星图标
  size: 30, // 图标大小
  color: Colors.gold, // 图标颜色
)

5. 使用其他图标集

如果你使用的是其他图标集而不是 Font Awesome,过程基本相似,只是你需要确保:

  • 正确地添加并配置字体文件。
  • 使用正确的图标类名。

例如,如果你使用的是自定义字体,你可能需要在 pubspec.yaml 中添加字体文件,并在代码中引用相应的图标类(这通常是通过一个生成的文件来访问的)。

# 在 pubspec.yaml 中添加字体
fonts:
  - family: MyCustomFont
    fonts:
      - asset: assets/fonts/MyCustomFont.ttf

然后在 Dart 代码中:

Icon(
  IconData(0xe800, fontFamily: 'MyCustomFont'), // 假设 0xe800 是图标的 Unicode 码点
  size: 24,
  color: Colors.blue,
)

请注意,上述代码中的 0xe800MyCustomFont 需要根据你的实际字体文件进行调整。

希望这能帮助你在 Flutter 项目中有效地管理和使用字体!

回到顶部