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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 15:54:03