Flutter 3.13升级后Android端中文文本偶尔消失问题求助
Flutter 3.13升级后Android端中文文本偶尔消失问题排查思路
问题描述
- 基于Flutter开发的应用,部分Android用户反馈偶尔打开应用时中文文本完全不显示,正常与异常状态对比见下图:

- Flutter从3.7升级到3.13后出现此问题,仅Android用户上报该异常
- 用户卸载应用、重启手机后重新安装,问题即可解决,但开发者无法复现
异常时日志(已翻译)
2023-10-19 11:57:55.904 25798-25961 SuggestManager com.miui.securitycenter.remote E 打开应用名称 = com.xxx.xxx 2023-10-19 11:57:55.910 9459-9459 ForceDarkHelper com.xxx.xxx D 通过检查排除列表更新: 包名: com.xxx.xxx 页面: com.xxx.xxx.MainActivity@b27f842 2023-10-19 11:57:55.911 9459-9490 ViewContentFactory com.xxx.xxx D 初始化ViewContentFetcher类 2023-10-19 11:57:55.911 9459-9490 ContentCatcher com.xxx.xxx I ViewContentFetcher : ViewContentFetcher 2023-10-19 11:57:55.911 9459-9490 ViewContentFactory com.xxx.xxx D 创建拦截器耗时0ms 2023-10-19 11:57:55.911 9459-9459 ForceDarkHelper com.xxx.xxx D 通过检查排除列表更新: 包名: com.xxx.xxx 页面: com.xxx.xxx.MainActivity@b27f842 2023-10-19 11:57:55.912 9459-9459 chatty com.xxx.xxx I uid=10295(com.xxx.xxx) 重复1行 2023-10-19 11:57:55.912 9459-9459 ForceDarkHelper com.xxx.xxx D 通过检查排除列表更新: 包名: com.xxx.xxx 页面: com.xxx.xxx.MainActivity@b27f842 2023-10-19 11:57:55.932 9459-9459 ForceDarkHelper com.xxx.xxx D 通过检查排除列表更新: 包名: com.xxx.xxx 页面: com.xxx.xxx.MainActivity@b27f842 2023-10-19 11:57:55.932 9459-9459 ForceDarkHelper com.xxx.xxx D 通过检查排除列表更新: 包名: com.xxx.xxx 页面: com.xxx.xxx.MainActivity@b27f842 2023-10-19 11:57:55.953 9459-9459 ForceDarkHelper com.xxx.xxx D 通过检查排除列表更新: 包名: com.xxx.xxx 页面: com.xxx.xxx.MainActivity@b27f842 2023-10-19 11:57:55.958 9459-9459 EgretLoader com.xxx.xxx D EgretLoader(Context context) 2023-10-19 11:57:55.959 9459-9459 EgretLoader com.xxx.xxx D Context不是Activity类型 2023-10-19 11:57:55.975 9459-9459 SurfaceView com.xxx.xxx D 更新null, mIsCastMode = false 2023-10-19 11:57:55.998 9459-9459 ForceDarkHelper com.xxx.xxx D 通过检查排除列表更新: 包名: com.xxx.xxx 页面: com.xxx.xxx.MainActivity@b27f842 2023-10-19 11:57:56.001 9459-9459 EgretLoader com.xxx.xxx D EgretLoader(Context context) 2023-10-19 11:57:56.001 9459-9459 EgretLoader com.xxx.xxx D Context不是Activity类型 2023-10-19 11:57:56.024 9459-9459 ForceDarkHelper com.xxx.xxx D 通过检查排除列表更新: 包名: com.xxx.xxx 页面: com.xxx.xxx.MainActivity@b27f842 2023-10-19 11:57:56.028 9459-9459 EgretLoader com.xxx.xxx D EgretLoader(Context context) 2023-10-19 11:57:56.029 9459-9459 EgretLoader com.xxx.xxx D Context不是Activity类型
排查思路
1. 字体加载异常方向
- 对比Flutter 3.7与3.13版本的
FontLoader、TextStyle源码,确认字体异步加载时机、缓存策略是否有变更 - 应用启动时提前预加载中文字体:在
WidgetsFlutterBinding.ensureInitialized()后主动调用字体加载方法,避免懒加载导致的渲染延迟 - 验证字体文件完整性:替换字体文件或改用系统默认中文字体测试,排除打包过程中字体文件损坏的可能
2. Android系统适配方向
- 针对MIUI系统重点排查:日志中出现
ForceDarkHelper、EgretLoader等MIUI专属组件,可能与系统深色模式、应用拦截有关- 在
android/app/src/main/res/values/styles.xml中添加<item name="android:forceDarkAllowed">false</item>,禁用系统深色模式自动转换 - 引导用户关闭该应用的"省电优化"、"后台限制",避免系统杀死字体加载相关进程
- 在
- 测试Android 12+设备兼容性:Flutter 3.13对Android 12/13的适配可能引入新问题,验证不同版本系统的触发情况
3. Flutter引擎渲染方向
- 收集Flutter引擎日志:引导用户在异常出现时获取
flutter run --verbose输出,重点查看TextPainter、ParagraphBuilder相关报错 - 尝试Flutter版本切换:升级到3.13最新补丁版本,或降级到3.13初始版本,确认是否为特定版本bug
- 检查文本组件状态:确认是否存在状态更新时未触发文本重建的情况,比如
const修饰的文本组件未随语言环境变化更新
4. 缓存与安装异常方向
- 检查应用缓存:启动时校验字体缓存文件完整性,若损坏则清除缓存并重新加载
- 确认签名配置:升级Flutter版本后,确保应用签名未变更,避免签名不一致导致资源加载失败
- 测试增量更新:若使用增量更新,检查增量包是否完整覆盖字体资源,排除资源合并异常
内容的提问来源于stack exchange,提问作者cj0x39e
相关产品推荐
相关产品推荐

