Flutter包内使用自定义图标字体显示问号而非对应图标如何解决
问题核心原因
自定义图标字体不属于普通静态资源,不能按照图片的规则在assets节点下注册,需要在flutter -> fonts节点单独声明,同时自动生成的图标Dart类默认没有指定包名参数,会默认从主项目搜索字体资源,导致包内字体无法被找到,最终显示为问号。
修复步骤
1. 调整包内pubspec.yaml的字体配置
删除你之前在assets节点下添加的图标字体声明,在flutter节点下新增fonts配置,必须指定对应字体的family名称和包内文件路径,示例如下:
flutter: fonts: - family: MyFontIcon # 需和生成的图标类中fontFamily字段完全一致,大小写敏感 fonts: - asset: lib/assets/fonts/MyFontIcon.ttf # 替换为你的图标字体在包内的实际路径 weight: 400
2. 修改自动生成的图标Dart类
给所有IconData构造函数补充package参数,值为你的风格指南包的名称,示例如下:
// 修改前 static const IconData ic_heart = IconData(0xe900, fontFamily: 'MyFontIcon'); // 修改后 static const IconData ic_heart = IconData(0xe900, fontFamily: 'MyFontIcon', package: 'your_package_name');
3. 验证效果
执行flutter clean清除缓存后重新构建项目,图标即可正常显示。
补充说明
主项目只要正常依赖你的风格指南包即可直接使用这些自定义图标,不需要在主项目的pubspec.yaml中重复注册该字体资源。
内容的提问来源于stack exchange,提问作者HBG
相关产品推荐
相关产品推荐

