每日见闻之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。

相关推荐
程序员陆业聪1 小时前
从 OpenClaw 到 Android:Harness Engineering 是怎么让 Agent 变得可用的
android
hnlgzb3 小时前
常见的Android Jetpack库会有哪些?这些库中又有哪些常用类的?
android·android jetpack
键盘鼓手苏苏6 小时前
Flutter 三方库 p2plib 的鸿蒙化适配指南 - 实现高性能的端到端(P2P)加密通讯、支持分布式节点发现与去中心化数据流传输实战
flutter·harmonyos·鸿蒙·openharmony
加农炮手Jinx6 小时前
Flutter for OpenHarmony:postgrest 直接访问 PostgreSQL 数据库的 RESTful 客户端(Supabase 核心驱动) 深度解析与鸿蒙适配指南
数据库·flutter·华为·postgresql·restful·harmonyos·鸿蒙
加农炮手Jinx6 小时前
Flutter 组件 heart 适配鸿蒙 HarmonyOS 实战:分布式心跳监控,构建全场景保活检测与链路哨兵架构
flutter·harmonyos·鸿蒙·openharmony
钛态6 小时前
Flutter 三方库 http_mock_adapter — 赋能鸿蒙应用开发的高效率网络接口 Mock 与自动化测试注入引擎(适配鸿蒙 HarmonyOS Next ohos)
android·网络协议·flutter·http·华为·中间件·harmonyos
王码码20356 小时前
Flutter for OpenHarmony:Flutter 三方库 algoliasearch 毫秒级云端搜索体验(云原生搜索引擎)
android·前端·git·flutter·搜索引擎·云原生·harmonyos
王码码20356 小时前
Flutter 三方库 dns_client 的鸿蒙化适配指南 - 告别 DNS 劫持、探索 DNS-over-HTTPS (DoH) 技术、构建安全的鸿蒙网络请求环境
flutter·harmonyos·鸿蒙·openharmony·dns_client
键盘鼓手苏苏6 小时前
Flutter 组件 highlighter 适配鸿蒙 HarmonyOS 实战:高性能语法高亮,构建大规模代码分析与文本染色架构
flutter·harmonyos·鸿蒙·openharmony
国医中兴6 小时前
Flutter 三方库 langchain_google 的鸿蒙化适配指南 - 链接 Gemini 智慧中枢、LangChain AI 实战、鸿蒙级智能应用专家
flutter·langchain·harmonyos