You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter自定义Icon Font从包导入后无法显示求助

自定义OTF图标字体在Flutter Android/iOS模拟器中无法显示问题排查

问题概述

将自定义图标从本地assets/fonts迁移到Git依赖的字体包,字体格式从TTF改为OTF后,图标在Android、iOS模拟器及Android Studio预览中均无法显示,Material图标可正常加载。已执行flutter clean、清理缓存、重启模拟器及多次重建应用,问题仍存在。路径验证正确(修改OTF文件路径会触发编译错误)。

问题截图

iOS(左侧)与Android(右侧)模拟器显示异常:
iOS和Android模拟器图标显示异常

当前配置代码

pubspec.yaml

environment:
  sdk: ">=3.0.0 <4.0.0"

dependencies:
  flutter:
    sdk: flutter
  my_font_package:
    git:
      url: git@github.com:MyOrg/my-font.git
      ref: 0.0.3

flutter:
  fonts:
    - family: My Font
      fonts:
        - asset: packages/my_font_package/fonts/my_font.otf

图标使用代码

import 'package:my_font_package/my_font.dart';

class MyIcon extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Icon(
      MyFont.eyesolid,
      color: Colors.primary,
      size: 24.0,
    );
  }
}

字体包内代码

class MyFont{
  const MyFont._();

  static const iconFontFamily = 'My Font';
  static const iconFontPackage = 'my_font';

  /// Font icon named "__eye-closed__"
  static const IconData eyeclosed = IconData(0xe015,
      fontFamily: iconFontFamily, fontPackage: iconFontPackage);
}

遗漏排查点

  • 字体包名称匹配验证:确认字体包自身pubspec.yaml中的name字段是否为my_font,代码中iconFontPackage的值需与包名完全一致(大小写敏感)。
  • OTF字体文件有效性:用系统字体工具(如macOS字体册、Windows字体查看器)打开my_font.otf,检查文件是否损坏,且目标图标对应的Unicode码0xe015确实存在于字体中。
  • IconData Unicode码一致性:核对字体包生成时,eyesolid图标对应的Unicode码是否与代码中定义的0xe015完全匹配。
  • 检查字体加载状态:在main函数中添加日志,确认My Font是否被成功加载:
    WidgetsFlutterBinding.ensureInitialized();
    await Future.delayed(Duration(milliseconds: 100));
    final fonts = await PaintingBinding.instance!.fontManager.listFonts();
    for (var font in fonts) {
      print("Loaded font: ${font.family}");
    }
    
  • iOS平台额外配置:在iOS项目的Info.plist中添加字体声明,部分iOS版本需额外配置才能识别OTF字体:
    <key>UIAppFonts</key>
    <array>
      <string>my_font.otf</string>
    </array>
    
  • 字体包内资源配置:检查字体包的pubspec.yaml是否正确声明了字体资源,确保包内的资源路径与配置一致:
    flutter:
      fonts:
        - family: My Font
          fonts:
            - asset: fonts/my_font.otf
    
  • 清除IDE预览缓存:执行Android Studio的File -> Invalidate Caches...操作,重启IDE后再尝试预览图标。
  • 真机测试验证:部分模拟器存在字体渲染兼容问题,尝试在真机上运行应用,确认是否为模拟器专属问题。

内容的提问来源于stack exchange,提问作者LSR

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 08:00:30