flutter - 如何在 MaterialApp 主题中设置 fontSize 的 MediaQuery textScaleFactor
问题描述
我想在 MaterialApp 主题中设置 MediaQuery,以便在用户更改设置时 FontSize 尊重用户设置。
我尝试创建最终的 curlScale = MediaQuery.of(context).textScaleFactor; 并相应地使用在 MaterialApp 中设置 fontSize: 20 * curlScale,但由于“使用不包含 MediaQuery 的上下文调用 MediaQuery.of()”而出现错误。我该如何解决这个问题。
Widget build(BuildContext context) {
final curlScale = MediaQuery.of(context).textScaleFactor;
return MaterialApp(
title: 'Expense Tracker App',
theme: ThemeData(
primarySwatch: Colors.orange,
accentColor: Colors.limeAccent,
fontFamily: 'QuickSand',
errorColor: Colors.red,
appBarTheme: AppBarTheme(textTheme: ThemeData.light().textTheme.copyWith(
title: TextStyle(fontFamily: 'Open Sans', fontSize: 16 * curlScale),
button: TextStyle(color: Colors.white),
)
)
),
home: HomePage(),
);
当用户更改字体设置时,字体大小应尊重用户设置。
解决方案
您可以通过以下方式实现: MediaQuery.textScaleFactorOf(context)
例如:
textTheme: ThemeData.light().textTheme.copyWith(
title: TextStyle(
fontFamily: 'OpenSans',
fontSize: 18 * MediaQuery.textScaleFactorOf(context),
),
根据文档,此方法
返回最近的 MediaQuery 祖先的 textScaleFactor 或 1.0,如果不存在这样的祖先。
文件:
推荐阅读
- c++ - FFMPEG av_read_frame() 返回 I/O 错误 (-5)?
- matlab - Matlab - 如何从两个或多个向量创建矩阵,它表示每个向量中单个元素的每个组合
- php - 如何在满足条件或未找到行时编辑此 mySQL 查询以返回结果?
- srcset - 通过媒体查询响应 srcset 图像?
- scala - 从持久的 Akka 日志中清除消息
- reactjs - 如何让这个 JSX 代码更通用以避免 React 中的代码重用?
- wordpress - Bootrap 4 折叠不会在 IOS Safari 上的页面滚动上折叠/消失
- database - 关于功能依赖的应用数据库问题
- html - 如何转义 HTML 元素以便输入术语在 HTML 文章中
- javascript - 为什么 Typescript 在输入 Redux-saga 调用参数时会抛出错误 - TS2339