Flutter如何读取系统字体

在Flutter中如何读取设备上的系统字体?我想在应用中使用用户手机自带的字体,而不是手动导入字体文件。Google Fonts虽然方便,但有些系统字体并不包含在其中。请问有什么方法可以动态获取并加载Android/iOS的系统字体?是否需要平台通道实现?

2 回复

Flutter中通过google_fonts包或TextStylefontFamily属性读取系统字体。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,
  ),
)

注意事项:

  1. 不同平台的系统字体名称可能不同
  2. iOS常用字体:San Francisco、Helvetica Neue
  3. Android常用字体:Roboto、Noto
  4. 使用前建议先获取字体列表确认可用性

建议先通过 getSystemFonts() 方法获取当前设备的可用字体列表,再选择使用合适的字体。

回到顶部