Flutter应用中未显示来自包(库)的字体?

7

我有一个名为Handwriter的软件包。它能够使用自定义字体写文本。我将.ttf文件保存在lib/third_party/目录下。在该软件包的pubspec.yaml文件中,我添加了以下字体信息:

flutter:
    uses-material-design: true
    fonts:
     - family: FancyHandwriting
       fonts:
        - asset: lib/third_party/FancyHandwriting-Regular.ttf

我的应用程序导入了这个包。在它的pubspec.yaml中,我将Handwriter添加为一个依赖项:

dependencies:
  flutter:
    sdk: flutter
  handwriter:
    path: ../handwriter
  model:
    path: ../model

然而,当我在我的应用程序中使用字体时,它根本不显示。为什么?
final defaultStyle = TextStyle(
      fontFamily: 'FancyHandwriting',
      fontSize: 130);
4个回答

6
不需要在应用程序中重新添加字体,您可以使用以下内容:
final defaultStyle = TextStyle(
  fontFamily: 'FancyHandwriting',
  package: 'handwriter',
  fontSize: 130,
);

这也等同于执行以下操作:

final defaultStyle = TextStyle(
  fontFamily: 'packages/handwriter/FancyHandwriting',
  fontSize: 130,
);

哇哦。非常感谢。 - Ian White

5
为了使用自定义包中的Flutter图标字体,您可以按照以下步骤进行操作:

创建Flutter图标字体

您可以使用Flutter图标来完成这项工作:https://www.fluttericon.com

将文件放入您的包中

确保将.ttf文件复制到/lib文件夹中,而不是像在根项目中那样只复制assets。

示例路径:

/packages/my_awesome_fontpackage/lib/assets/MyIconFont.ttf

请参考https://zubairehman.medium.com/how-to-use-custom-fonts-images-in-flutter-package-c2d9d4bfd47a进行查看。

将字体添加到您的项目中

打开您的包的pubspec.yaml文件,将字体作为资产使用包路径添加:

flutter:
  fonts:
  - family:  MyIconFont
    fonts:
      - asset: packages/my_awesome_fontpackage/assets/MyIconFont.ttf

你可能需要完全重启应用程序和捆绑才能正确加载字体。

现在将包声明添加到字体dart文件中

进入my_icon_font.dart文件,将常量_kFontPkg更改为您的包名称。


class MyIconFont {
  MyIconFont._();

  static const _kFontFam = 'MyIconFont';
  static const String? _kFontPkg = 'my_awesome_fontpackage';

  static const IconData bell = ...
  ....
}

2
根据此文档: https://flutter.dev/docs/cookbook/design/package-fonts,您需要在应用程序的pubspec.yaml中声明包的字体:

声明字体资源 现在您已经导入了包,请告诉Flutter在awesome_package中查找字体的位置。

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

I.e.:

dependencies:
  flutter:
    sdk: flutter
  handwriter:
    path: ../handwriter
  model:
    path: ../model

flutter:
    uses-material-design: true
    fonts:
     - family: FancyHandwriting
       fonts:
        - asset: packages/handwriter/third_party/FancyHandwriting-Regular.ttf

请注意,您将资产声明为来自包 - 您不必在应用程序的lib中复制它。
这样做的原因是并非每个软件包中的所有字体都可能被使用,因此可以减小最终应用程序的大小。

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接