Flutter中如何禁用iOS无障碍设置开启的粗体文本效果?
覆盖系统粗体文本设置的实现方案
系统粗体开关会影响应用文本的核心原因是:Flutter 全局 MediaQuery 的 boldTextOverride 属性为 true 时,框架会自动对所有文本的字重做加权处理,单独为单个 TextStyle 设置 fontWeight 无法绕过该全局逻辑,可通过以下两种方案实现覆盖:
全局生效方案(推荐)
直接在应用根节点强制关闭系统粗体覆盖能力,一次配置全应用生效,不需要修改业务层的文本组件代码:
MaterialApp( // 你的其他原有配置保持不变 builder: (context, child) { final originalMediaQuery = MediaQuery.of(context); return MediaQuery( data: originalMediaQuery.copyWith( textScaleFactor: 1.0, // 保留你已配置的禁用文本缩放逻辑 boldTextOverride: false, // 强制关闭系统粗体对应用的影响 ), child: child ?? const SizedBox.shrink(), ); }, )
配置完成后,系统粗体开关的状态不会再对你的应用文本产生任何影响,你主动给文本设置的 fontWeight 依然可以正常生效。
局部生效方案
如果仅需要部分页面/部分文本不受系统粗体影响,可针对对应范围单独配置:
- 针对某一个页面/组件范围:在该节点外层套入配置了
boldTextOverride: false的MediaQuery即可 - 针对单个文本组件:可以通过
fontVariations固定字重,示例如下:
Text( "不受系统粗体影响的文本", style: TextStyle( fontWeight: FontWeight.normal, // 固定字重为400,数值可根据需要调整,不受系统粗体逻辑修改 fontVariations: const [FontVariation('wght', 400)], ), )
注意:该操作会覆盖系统原生的无障碍适配规则,请确认你的业务场景确实有特殊需求后再使用。
内容的提问来源于stack exchange,提问作者Jaco Fourie
相关产品推荐
相关产品推荐

