Flutter如何读取系统字体
在Flutter中如何读取设备上的系统字体?我想在应用中使用用户手机自带的字体,而不是手动导入字体文件。Google Fonts虽然方便,但有些系统字体并不包含在其中。请问有什么方法可以动态获取并加载Android/iOS的系统字体?是否需要平台通道实现?
2 回复
Flutter中通过google_fonts包或TextStyle的fontFamily属性读取系统字体。iOS使用系统字体名,Android使用Roboto等。
更多关于Flutter如何读取系统字体的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
在Flutter中,可以通过以下方法读取系统字体:
1. 使用系统默认字体
Flutter默认使用系统字体,无需额外配置:
Text(
'Hello Flutter',
style: TextStyle(fontSize: 16),
)
2. 获取系统字体列表
使用 flutter/services.dart 中的 getFonts 方法:
import 'package:flutter/services.dart';
// 获取系统字体列表
Future<List<String>> getSystemFonts() async {
final List<String> fonts = [];
const channel = MethodChannel('flutter/system_fonts');
try {
final List<dynamic> result = await channel.invokeMethod('getSystemFonts');
fonts.addAll(result.cast<String>());
} catch (e) {
print('获取系统字体失败: $e');
}
return fonts;
}
// 使用示例
void loadFonts() async {
List<String> systemFonts = await getSystemFonts();
print('系统字体: $systemFonts');
}
3. 在pubspec.yaml中声明系统字体
flutter:
fonts:
- family: System
fonts:
- asset: fonts/SystemFont.ttf # 实际使用时需要替换为具体字体文件
4. 使用特定系统字体
Text(
'自定义系统字体',
style: TextStyle(
fontFamily: 'Arial', // 替换为实际系统字体名称
fontSize: 16,
),
)
注意事项:
- 不同平台的系统字体名称可能不同
- iOS常用字体:San Francisco、Helvetica Neue
- Android常用字体:Roboto、Noto
- 使用前建议先获取字体列表确认可用性
建议先通过 getSystemFonts() 方法获取当前设备的可用字体列表,再选择使用合适的字体。

