如何在Flutter中为所有页面正确添加自定义字体?
Flutter自定义字体不生效的解决方法
1. 确认pubspec.yaml配置正确性
Flutter的yaml配置对缩进要求严格,必须用空格(不能用Tab),确保字体声明格式如下:
flutter: uses-material-design: true # 声明字体所在目录(可选,方便批量引入) assets: - assets/fonts/ # 配置字体族 fonts: - family: MyCustomFont # 自定义字体族名,后续代码需保持一致 fonts: - asset: assets/fonts/YourFont-Regular.ttf # 普通字重字体路径 - asset: assets/fonts/YourFont-Bold.ttf # 粗体字重字体路径 weight: 700
注意替换MyCustomFont为你自己的字体族名,assets/fonts/xxx.ttf为实际字体文件路径。
2. 检查字体文件路径与名称
- 确保字体文件实际存放路径和pubspec中声明的完全一致,包括大小写(iOS/macOS系统对路径大小写敏感)
- 文件名不能有拼写错误、多余空格,比如
PingFangSC.ttf和PingFang SC.ttf是两个不同的文件
3. 在ThemeData中全局配置字体
修改你提供的MyApp代码,在ThemeData中添加fontFamily字段,指定pubspec中配置的字体族名:
import 'package:flutter/material.dart'; import 'constants.dart'; import 'pages/splash_page.dart'; void main() { runApp(const MyApp()); } class MyApp extends StatelessWidget { const MyApp({super.key}); @override Widget build(BuildContext context) { return MaterialApp( title: 'School', theme: ThemeData( colorScheme: ColorScheme.fromSeed(seedColor: Colors.orange), primaryColor: kPrimaryColor, primarySwatch: Colors.orange, useMaterial3: false, fontFamily: 'MyCustomFont', // 填入pubspec中配置的字体族名 ), home: const SplashPage(), ); } }
如果仅需给特定文本设置字体,可直接在Text组件的style中指定:
Text( '自定义字体测试', style: TextStyle(fontFamily: 'MyCustomFont'), )
4. 清理缓存并重启项目
修改pubspec.yaml后,热重载可能无法加载新字体,需执行以下操作:
- 执行命令:
flutter clean - 完全关闭当前运行的项目,重新启动(不要用热重载/热重启)
额外注意
如果是要显示中文,需确认你的字体文件本身包含中文字形,部分英文字体不支持中文显示,会自动 fallback 到系统默认字体。
内容的提问来源于stack exchange,提问作者FepTkDie
相关产品推荐
相关产品推荐

