从包中导出字体

您可以将字体声明为单独的包的一部分,而不是作为应用程序的一部分。这是一种在多个不同项目中共享相同字体的便捷方法,或者供发布其包到 pub.dev 的编码人员使用。此食谱使用以下步骤

  1. 将字体添加到包中。
  2. 将包和字体添加到应用程序中。
  3. 使用字体。

1. 将字体添加到包中

#

要从包中导出字体,您需要将字体文件导入包项目的 lib 文件夹中。您可以将字体文件直接放在 lib 文件夹中,也可以放在子目录中,例如 lib/fonts

在此示例中,假设您有一个名为 awesome_package 的 Flutter 库,其中字体位于 lib/fonts 文件夹中。

awesome_package/
  lib/
    awesome_package.dart
    fonts/
      Raleway-Regular.ttf
      Raleway-Italic.ttf

2. 将包和字体添加到应用中

#

现在,您可以通过更新应用程序根目录中的 pubspec.yaml 来使用包中的字体。

将包添加到应用中

#

要将 awesome_package 包添加为依赖项,请运行 flutter pub add

flutter pub add awesome_package

声明字体资源

#

现在您已经导入了该包,请告诉 Flutter 从 awesome_package 中查找字体的路径。

要声明包字体,请在字体路径前加上 packages/awesome_package。这告诉 Flutter 在包的 lib 文件夹中查找字体。

yaml
flutter:
  fonts:
    - family: Raleway
      fonts:
        - asset: packages/awesome_package/fonts/Raleway-Regular.ttf
        - asset: packages/awesome_package/fonts/Raleway-Italic.ttf
          style: italic

3. 使用字体

#

使用 TextStyle 更改文本的外观。要使用包字体,请声明要使用的字体以及字体所属的包。

dart
child: Text(
  'Using the Raleway font from the awesome_package',
  style: TextStyle(
    fontFamily: 'Raleway',
  ),
),

完整示例

#

字体

#

Raleway 和 RobotoMono 字体是从 Google Fonts 下载的。

pubspec.yaml

#
yaml
name: package_fonts
description: An example of how to use package fonts with Flutter

dependencies:
  awesome_package:
  flutter:
    sdk: flutter

dev_dependencies:
  flutter_test:
    sdk: flutter

flutter:
  fonts:
    - family: Raleway
      fonts:
        - asset: packages/awesome_package/fonts/Raleway-Regular.ttf
        - asset: packages/awesome_package/fonts/Raleway-Italic.ttf
          style: italic
  uses-material-design: true

main.dart

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

void main() => runApp(const MyApp());

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

  @override
  Widget build(BuildContext context) {
    return const MaterialApp(
      title: 'Package Fonts',
      home: MyHomePage(),
    );
  }
}

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

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      // The AppBar uses the app-default font.
      appBar: AppBar(title: const Text('Package Fonts')),
      body: const Center(
        // This Text widget uses the Raleway font.
        child: Text(
          'Using the Raleway font from the awesome_package',
          style: TextStyle(
            fontFamily: 'Raleway',
          ),
        ),
      ),
    );
  }
}

Package Fonts Demo