每日见闻之Flutter 怎么设置全局字体

1 在项目中添加字体文件,位置无所谓只要自己能找到

2 在yaml文件声明

yaml 复制代码
fonts:
  - family: CalSans-Regular
    fonts:
      - asset: assets/fonts/CalSans-Regular.ttf

之后我们用的字体就是 CalSans-Regular

3 设置全局字体

3.1 在 MaterialApp 的theme设置

css 复制代码
theme: ThemeData(
   fontFamily: "CalSans-Regular",

3.2 在Material 的 textStyle 设置

less 复制代码
 Material(
  color: bgColor ?? const Color(0xFFECECF7),
  textStyle: const TextStyle(
    fontFamily: "CalSans-Regular"
  ),

等等等。。。

但是发现设置了之后,可能还是有部分不生效

4 为什么不生效呢?

ini 复制代码
@override
Widget build(BuildContext context) {
  final DefaultTextStyle defaultTextStyle = DefaultTextStyle.of(context);
  TextStyle? effectiveTextStyle = style;
  if (style == null || style!.inherit) {
    effectiveTextStyle = defaultTextStyle.style.merge(style);
  }
  if (MediaQuery.boldTextOf(context)) {
    effectiveTextStyle = effectiveTextStyle!.merge(const TextStyle(fontWeight: FontWeight.bold));
  }

上面的代码是Text 组建的build方法中的代码,注意这里 DefaultTextStyle,如果我们没有手动给Text的style 设置字体,那么就会使用这里返回的DefaultTextStyle 中的字体。

DefaultTextStyle.of(context) 这种代码大家应该很熟悉,就是向上查找找到第一个指定类型的 InheritedWidget。

在 Material MaterialApp 这些组件中设置字体,最终也是生成了一个DefaultTextStyle,包裹住了他的子组件。

如果你设置了字体但是不生效,大概率就是在组件链中被插入了DefaultTextStyle,导致没有应用你设置的字体。

同理如果你只是想让局部应用某种字体,那么你也可以嵌套一层DefaultTextStyle。

相关推荐
yuanlaile38 分钟前
2026年全新Flutter 跨平台开发全栈学习资料整理
flutter·getx·鸿蒙 next·flutter开发鸿蒙·flutter入门实战·flutter全栈
用户69371750013841 小时前
2026,程序员的时代拐点到了
android·前端·后端
浪潮IT馆3 小时前
Android Studio 非最新版本下载安装教程
android·ide·android studio
xiaozongt19894 小时前
MasterGo + Claude Code 生成 Android 布局:完整实践指南
android
Anhty5 小时前
2026最新免费手机音频处理工具 !!
android·功能测试·ios·智能手机·音视频
2501_915909067 小时前
iOS应用从开发到上架App Store的完整发布流程与步骤指南
android·ios·小程序·https·uni-app·webview
狗凯之家源码网8 小时前
AI 步数修改提交系统源码应用场景与落地指南
android·数据库·人工智能·运动步数
ZHOUPUYU8 小时前
PHP 9.0 前瞻:下一代 PHP 会带来哪些新功能?
android·开发语言·php
JMchen9 小时前
性能优化——让Native代码飞起来
android·c++·性能优化
ZHOUPUYU9 小时前
PHP 8.2 的核心高级特性,包括只读类、类型系统增强
android·性能优化·php