Flutter使用MediaQuery.textScaleFactorOf时报Getter not found: 'context'怎么办
报错原因与解决方案
Getter not found: 'context'报错的核心原因是当前代码作用域内不存在可用的BuildContext变量,MediaQuery必须依赖合法的上下文才能获取到屏幕配置参数。
常见错误场景1:样式定义在build方法外部
很多开发者会把通用TextStyle定义为类的全局属性,这个阶段context还未初始化,自然无法获取:
错误代码示例:
class MyWidget extends StatelessWidget { // 错误:类属性初始化时拿不到build方法的context final TextStyle textStyle = TextStyle( fontSize: 18 * MediaQuery.textScaleFactorOf(context), fontFamily: 'Calculator', color: Color(0xFF46595C), fontWeight: FontWeight.bold, ); @override Widget build(BuildContext context) { return Text('测试', style: textStyle); } }
对应解决方法
把样式定义挪到build方法内部,或者封装成接收context参数的方法:
class MyWidget extends StatelessWidget { const MyWidget({super.key}); // 正确:封装为方法,主动接收context参数 TextStyle getTextStyle(BuildContext context) { return TextStyle( fontSize: 18 * MediaQuery.textScaleFactorOf(context), fontFamily: 'Calculator', color: const Color(0xFF46595C), fontWeight: FontWeight.bold, ); } @override Widget build(BuildContext context) { // 也可以直接在build内部定义style变量 return Text('测试', style: getTextStyle(context)); } }
常见错误场景2:自定义方法未传递context
如果你封装了生成Text的独立方法,一定要把build方法中的context作为参数传递到方法内,不能直接在方法内部用未定义的context变量。
额外优化建议
Flutter 3.10及以上版本中,MediaQuery.textScaleFactorOf已被标记为废弃,推荐使用更新的textScaler API实现相同的字体缩放效果,写法如下:
fontSize: MediaQuery.of(context).textScaler.scale(18)
内容的提问来源于stack exchange,提问作者Samuella M. Aglago
相关产品推荐
相关产品推荐

