flutter TextTheme 手机端适配验证

是的,完全适合手机端!这是Material 3 标准字体规范,专为移动设备优化。


📱 手机端适配验证

样式 字号 手机端适用性 用途
displayLarge 57 ⚠️ 太大,少用 仅平板/折叠屏
displayMedium 45 ⚠️ 太大,少用 仅大标题页
displaySmall 36 ✅ 适合 启动页、空状态
headlineLarge 32 ✅ 适合 页面大标题
headlineMedium 28 ✅ 适合 模块标题
headlineSmall 24 ✅ 适合 卡片大标题
titleLarge 22 ✅ 适合 列表项标题
titleMedium 16 ✅ 最常用 卡片标题、小标题
titleSmall 14 ✅ 最常用 辅助标签、副标题
bodyLarge 16 ✅ 正文标准 段落文字
bodyMedium 14 ✅ 最常用 默认正文、描述
bodySmall 12 ✅ 适合 脚注、时间戳
labelLarge 14 ✅ 适合 按钮文字
labelMedium 12 ✅ 适合 小标签、徽章
labelSmall 11 ✅ 适合 最小提示、角标

🎯 手机端最佳实践

dart 复制代码
TextTheme _buildMobileTextTheme(ColorScheme cs) {
  final base = TextStyle(color: cs.onSurface, inherit: true);

  return TextTheme(
    // 手机端:Display  rarely used, 缩小一点更实用
    displaySmall: base.copyWith(
      fontSize: 32,        // 从 36 缩小
      fontWeight: FontWeight.w300,
    ),
    
    // Headline:页面标题,手机端 20-28 最舒适
    headlineSmall: base.copyWith(
      fontSize: 20,        // 从 24 缩小
      fontWeight: FontWeight.w600,
    ),
    
    // Title:最常用,16-18 黄金区间
    titleMedium: base.copyWith(
      fontSize: 16,
      fontWeight: FontWeight.w600, // 手机端稍粗更清晰
    ),
    titleSmall: base.copyWith(
      fontSize: 14,
      color: cs.onSurfaceVariant,
    ),
    
    // Body:14-16 是手机阅读最佳字号
    bodyMedium: base.copyWith(
      fontSize: 14,
      height: 1.5,         // 手机端行高更重要
      letterSpacing: 0.25,
    ),
    bodySmall: base.copyWith(
      fontSize: 12,
      height: 1.4,
      color: cs.onSurfaceVariant,
    ),
    
    // Label:按钮不小于 14(可访问性)
    labelLarge: base.copyWith(
      fontSize: 14,        // 最小可点击文字
      fontWeight: FontWeight.w600,
      color: cs.primary,
    ),
  );
}

📏 手机端字号黄金法则

复制代码
推荐字号范围:12sp - 20sp

├── 12sp:最小辅助文字(时间戳、来源)
├── 14sp:正文标准(最常用)✅
├── 16sp:小标题、 emphasized 正文 ✅
├── 18sp:卡片标题、列表项标题
├── 20sp:页面标题(手机端最大推荐)
└── >20sp:仅特殊场景(平板、横屏)

TextTheme字体方法库

dart 复制代码
  // ========== 构建文字主题(集成 ColorScheme)==========
  TextTheme _buildTextTheme(bool isDarkMode, ColorScheme cs) {
    final baseStyle = TextStyle(
      color: cs.onSurface,
      //inherit: true, // 跟随系统字体
    );

    return TextTheme(
      // ========== Display(超大展示文字)==========
      // 用途:欢迎页数字、空状态图标文字、启动页标题
      // 特点:最大字号,轻微负字间距更紧凑
      displayLarge: baseStyle.copyWith(
        fontSize: 57,
        fontWeight: FontWeight.w300, // 细体更优雅
        letterSpacing: -0.25,
        color: cs.onSurface,
      ),
      displayMedium: baseStyle.copyWith(
        fontSize: 45,
        fontWeight: FontWeight.w300,
        letterSpacing: 0,
        color: cs.onSurface,
      ),
      displaySmall: baseStyle.copyWith(
        fontSize: 36,
        fontWeight: FontWeight.w400,
        letterSpacing: 0,
        color: cs.onSurface,
      ),

      // ========== Headline(页面标题)==========
      // 用途:页面顶部标题、模块大标题
      // 特点:醒目但比 Display 收敛
      headlineLarge: baseStyle.copyWith(
        fontSize: 32,
        fontWeight: FontWeight.w400,
        letterSpacing: 0,
        color: cs.onSurface,
      ),
      headlineMedium: baseStyle.copyWith(
        fontSize: 28,
        fontWeight: FontWeight.w400,
        letterSpacing: 0,
        color: cs.onSurface,
      ),
      headlineSmall: baseStyle.copyWith(
        fontSize: 24,
        fontWeight: FontWeight.w500, // 加粗区分层级
        letterSpacing: 0,
        color: cs.onSurface,
      ),

      // ========== Title(组件标题)==========
      // 用途:卡片标题、列表项标题、对话框标题
      // 优化:添加主色强调选项
      titleLarge: baseStyle.copyWith(
        fontSize: 22,
        fontWeight: FontWeight.w400,
        letterSpacing: 0,
        color: cs.onSurface,
      ),
      titleMedium: baseStyle.copyWith(
        fontSize: 16,
        fontWeight: FontWeight.w500,
        letterSpacing: 0.15,
        color: cs.onSurface,
      ),
      titleSmall: baseStyle.copyWith(
        fontSize: 14,
        fontWeight: FontWeight.w500,
        letterSpacing: 0.1,
        // 优化:弱化一点,区分于 titleMedium
        color: cs.onSurfaceVariant,
      ),

      // ========== Body(正文内容)==========
      // 用途:段落文字、说明文字、主要内容
      // 核心:阅读舒适度优先
      bodyLarge: baseStyle.copyWith(
        fontSize: 16,
        fontWeight: FontWeight.w400,
        letterSpacing: 0.5, // 宽松字间距易读
        height: 1.5, // 行高增加可读性
        color: cs.onSurface,
      ),
      bodyMedium: baseStyle.copyWith(
        fontSize: 14,
        fontWeight: FontWeight.w400,
        letterSpacing: 0.25,
        height: 1.4,
        color: cs.onSurface,
      ),
      bodySmall: baseStyle.copyWith(
        fontSize: 12,
        fontWeight: FontWeight.w400,
        letterSpacing: 0.4,
        height: 1.3,
        // 优化:明确使用弱化色
        color: cs.onSurfaceVariant,
      ),

      // ========== Label(标签、按钮、辅助文字)==========
      // 用途:按钮文字、标签、时间戳、提示信息
      // 优化:区分可点击 vs 纯辅助
      labelLarge: baseStyle.copyWith(
        fontSize: 14,
        fontWeight: FontWeight.w500,
        letterSpacing: 0.1,
        // 优化:可点击标签用主色
        color: cs.onSurface,
      ),
      labelMedium: baseStyle.copyWith(
        fontSize: 12,
        fontWeight: FontWeight.w500,
        letterSpacing: 0.5,
        // 优化:纯辅助标签用弱化色
        color: cs.onSurfaceVariant,
      ),
      labelSmall: baseStyle.copyWith(
        fontSize: 11,
        fontWeight: FontWeight.w500,
        letterSpacing: 0.5,
        // 优化:最弱层级,可再降透明度
        color: cs.onSurfaceVariant.withOpacity(0.8),
      ),
    );
  }

⚠️ 可访问性要求(Google 规范)

场景 最小字号 对比度
正文 14sp 4.5:1
大文字 (>18sp) 18sp 3:1
禁用/辅助 12sp 3:1

你的原始配置完全符合规范,放心使用!如需针对小屏手机(<5寸)微调,可将 display/headline 整体缩小 10-15%。

相关推荐
千里马学框架2 天前
一起学 Android 14:ShellTransition 屏幕旋转过程深度剖析
android·智能手机·性能优化·framework·性能·屏幕旋转·rotation
君赏3 天前
棉宇宙 Flutter 热更新是如何落地的
flutter
恋猫de小郭3 天前
AndroidX 新增 Security State ,支持可编程的系统安全状态查询
android·前端·flutter
zihan5183 天前
自己做软件日记9/21 得到了一个良好的文件结构框架
后端·flutter·前端框架·android studio
开开心心就好3 天前
安卓手写文字生成工具,多种纸张一直免费
网络·网络协议·tcp/ip·leetcode·智能手机·电脑·模拟退火算法
开开心心就好3 天前
批量提取PDF中的图片,直接导出原图
前端·javascript·支持向量机·智能手机·pdf·html·启发式算法
终端安全笔记4 天前
iOS 27 之后「策略空转」:设备升级不报错,但旧策略不再管它
android·网络·安全·ios·智能手机
ToDesk_Daas4 天前
随时随地手搓app!手机远程 Vibe Coding 实操分享
智能手机·电脑·iphone
ZFJ_张福杰4 天前
【Flutter】Flutter 中有哪些耗时操作?从 UI 卡顿到 Isolate 性能优化
flutter·性能优化·卡顿·isolate
sakiko_4 天前
Flutter:Dart学习笔记1:基础UI组件等
flutter