包(库)中的字体未显示在 Flutter 应用程序中?

Mar*_*ary 8 fonts package flutter dart-packages

我有一个名为 Handwriter 的包。它以自定义字体写入文本。我将 .ttf 保存在 lib/third_party/ 中。在其 pubspec.yaml 中,我添加了字体:

flutter:
    uses-material-design: true
    fonts:
     - family: FancyHandwriting
       fonts:
        - asset: lib/third_party/FancyHandwriting-Regular.ttf
Run Code Online (Sandbox Code Playgroud)

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

dependencies:
  flutter:
    sdk: flutter
  handwriter:
    path: ../handwriter
  model:
    path: ../model
Run Code Online (Sandbox Code Playgroud)

但是,当我在应用程序中使用该字体时,该字体根本不显示。为什么?

final defaultStyle = TextStyle(
      fontFamily: 'FancyHandwriting',
      fontSize: 130);
Run Code Online (Sandbox Code Playgroud)

Pau*_*iel 7

无需在包消费者应用程序中重新添加字体,您可以使用:

final defaultStyle = TextStyle(
  fontFamily: 'FancyHandwriting',
  package: 'handwriter',
  fontSize: 130,
);
Run Code Online (Sandbox Code Playgroud)

这也相当于做:

final defaultStyle = TextStyle(
  fontFamily: 'packages/handwriter/FancyHandwriting',
  fontSize: 130,
);
Run Code Online (Sandbox Code Playgroud)


Sim*_*sch 6

要使用自定义包中的 Flutter Icon 字体,您可以按照以下步骤操作:

创建颤振图标字体

您可以使用 flutter 图标https://www.fluttericon.com

将文件放入你的包中

确保将.ttf文件复制到文件夹/lib。不仅仅是资产,就像您在根项目中所做的那样。

示例路径:

/packages/my_awesome_fontpackage/lib/assets/MyIconFont.ttf
Run Code Online (Sandbox Code Playgroud)

(参见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
Run Code Online (Sandbox Code Playgroud)

(您可能需要重新启动应用程序并完全捆绑才能正确加载字体)

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

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


class MyIconFont {
  MyIconFont._();

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

  static const IconData bell = ...
  ....
}
Run Code Online (Sandbox Code Playgroud)


Mar*_*ary 2

根据此: https: //flutter.dev/docs/cookbook/design/package-fonts您必须在应用程序的 pubspec.yaml 中声明包的字体:

\n\n
\n

声明字体资源\n 现在您\xe2\x80\x99 已经导入了包,告诉\n Flutter 在哪里可以从awesome_package 中找到字体。

\n\n

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

\n
\n\n

IE:

\n\n
dependencies:\n  flutter:\n    sdk: flutter\n  handwriter:\n    path: ../handwriter\n  model:\n    path: ../model\n\nflutter:\n    uses-material-design: true\n    fonts:\n     - family: FancyHandwriting\n       fonts:\n        - asset: packages/handwriter/third_party/FancyHandwriting-Regular.ttf\n
Run Code Online (Sandbox Code Playgroud)\n\n

请注意,您将资产声明为来自包 - 您不必在应用程序的lib.

\n\n

其背后的原因是并非每个包中的所有字体都可以使用,因此这会缩小最终应用程序的大小。

\n