在 Flutter 包中使用自定义图标字体显示问号而不是自定义图标
Using a custom icon font in a Flutter package displays Question marks instead of custom icons
我有一个由许多不同的 Dart 和 Flutter 包组成的应用程序。
这被证明是有用的,因为我已经能够将字体、颜色和小部件等内容移动到一个独立的样式指南包中,然后我们可以在所有其他应用程序中使用它。
在包中使用自定义字体 works slightly differently in Flutter 因为我们需要将 assets
目录添加为 lib
的子目录而不是兄弟目录:
...然后在 pubspec.yaml
中注册这些资产,如下所示:
assets:
- packages/receipt_widget/assets/fonts/my_font.ttf
// other asset declarations
这对于自定义字体和图标(png、jpg 等)完全没问题。我的问题是 相同的方法不适用于自定义图标字体。
步骤:
- 使用 IcoMoon or Flutter Icon
生成自定义图标字体
- 如上所示将生成的字体放入
assets/fonts
目录
- 将生成的dart文件放入
lib
文件夹
- 在代码中引用自定义图标并将其放入
Icon
小部件中,如下所示:
Icon(MyFontIcon.ic_heart);
为了安全起见,我然后 运行 flutter clean
并在部署干净的构建之前从设备/模拟器卸载应用程序。
然后我留下了一个问号而不是引用的图标。
注意。当直接在 Flutter 应用程序中而不是在包中使用时,完全相同的图标可以正常工作。
要使用自定义包中的 Flutter Icon 字体,您可以按照以下步骤操作:
(我已经重复了你的一些步骤,以供其他会发现此问题的人使用)
创建 flutter 图标字体
您可以为此使用 flutter 图标 https://www.fluttericon.com
将文件放入包中
确保将 .ttf
文件 复制到 /lib
文件夹。
不仅仅是资产,就像您在根项目中所做的那样。
示例路径:
/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
(您可能需要重新启动您的应用程序并完全捆绑才能正确加载字体,也许 运行 flutter clean
只是为了确定)
现在将包声明添加到字体 dart 文件
进入 my_icon_font.dart
文件并将常量 _kFontPkg
更改为您的包名称。
class MyIconFont {
MyIconFont._();
static const _kFontFam = 'MyIconFont';
static const String? _kFontPkg = 'my_awesome_fontpackage';
static const IconData bell = ...
....
}
我有一个由许多不同的 Dart 和 Flutter 包组成的应用程序。 这被证明是有用的,因为我已经能够将字体、颜色和小部件等内容移动到一个独立的样式指南包中,然后我们可以在所有其他应用程序中使用它。
在包中使用自定义字体 works slightly differently in Flutter 因为我们需要将 assets
目录添加为 lib
的子目录而不是兄弟目录:
...然后在 pubspec.yaml
中注册这些资产,如下所示:
assets:
- packages/receipt_widget/assets/fonts/my_font.ttf
// other asset declarations
这对于自定义字体和图标(png、jpg 等)完全没问题。我的问题是 相同的方法不适用于自定义图标字体。
步骤:
- 使用 IcoMoon or Flutter Icon 生成自定义图标字体
- 如上所示将生成的字体放入
assets/fonts
目录 - 将生成的dart文件放入
lib
文件夹 - 在代码中引用自定义图标并将其放入
Icon
小部件中,如下所示:
Icon(MyFontIcon.ic_heart);
为了安全起见,我然后 运行 flutter clean
并在部署干净的构建之前从设备/模拟器卸载应用程序。
然后我留下了一个问号而不是引用的图标。
注意。当直接在 Flutter 应用程序中而不是在包中使用时,完全相同的图标可以正常工作。
要使用自定义包中的 Flutter Icon 字体,您可以按照以下步骤操作: (我已经重复了你的一些步骤,以供其他会发现此问题的人使用)
创建 flutter 图标字体
您可以为此使用 flutter 图标 https://www.fluttericon.com
将文件放入包中
确保将 .ttf
文件 复制到 /lib
文件夹。
不仅仅是资产,就像您在根项目中所做的那样。
示例路径:
/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
(您可能需要重新启动您的应用程序并完全捆绑才能正确加载字体,也许 运行 flutter clean
只是为了确定)
现在将包声明添加到字体 dart 文件
进入 my_icon_font.dart
文件并将常量 _kFontPkg
更改为您的包名称。
class MyIconFont {
MyIconFont._();
static const _kFontFam = 'MyIconFont';
static const String? _kFontPkg = 'my_awesome_fontpackage';
static const IconData bell = ...
....
}