gcx/frontend/genex-mobile/lib/app/theme/app_typography.dart

160 lines
4.2 KiB
Dart

import 'package:flutter/material.dart';
import 'app_colors.dart';
/// Genex Design System - Typography Tokens
///
/// 字体层级:清晰、易读、干净
/// 基于 SF Pro (iOS) / Roboto (Android) 系统字体
class AppTypography {
AppTypography._();
static const String _fontFamily = 'SF Pro Display';
static const String _fontFamilyFallback = 'Roboto';
// ============================================================
// Display - 超大标题(启动页/空状态)
// ============================================================
static const TextStyle displayLarge = TextStyle(
fontSize: 34,
fontWeight: FontWeight.w700,
height: 1.2,
letterSpacing: -0.5,
color: AppColors.textPrimary,
);
static const TextStyle displayMedium = TextStyle(
fontSize: 28,
fontWeight: FontWeight.w700,
height: 1.25,
letterSpacing: -0.3,
color: AppColors.textPrimary,
);
// ============================================================
// Heading - 页面标题 / 模块标题
// ============================================================
static const TextStyle h1 = TextStyle(
fontSize: 24,
fontWeight: FontWeight.w700,
height: 1.3,
color: AppColors.textPrimary,
);
static const TextStyle h2 = TextStyle(
fontSize: 20,
fontWeight: FontWeight.w600,
height: 1.35,
color: AppColors.textPrimary,
);
static const TextStyle h3 = TextStyle(
fontSize: 17,
fontWeight: FontWeight.w600,
height: 1.4,
color: AppColors.textPrimary,
);
// ============================================================
// Body - 正文
// ============================================================
static const TextStyle bodyLarge = TextStyle(
fontSize: 16,
fontWeight: FontWeight.w400,
height: 1.5,
color: AppColors.textPrimary,
);
static const TextStyle bodyMedium = TextStyle(
fontSize: 14,
fontWeight: FontWeight.w400,
height: 1.5,
color: AppColors.textPrimary,
);
static const TextStyle bodySmall = TextStyle(
fontSize: 12,
fontWeight: FontWeight.w400,
height: 1.5,
color: AppColors.textSecondary,
);
// ============================================================
// Label - 按钮文字/标签/Tab
// ============================================================
static const TextStyle labelLarge = TextStyle(
fontSize: 16,
fontWeight: FontWeight.w600,
height: 1.4,
letterSpacing: 0.2,
color: AppColors.textPrimary,
);
static const TextStyle labelMedium = TextStyle(
fontSize: 14,
fontWeight: FontWeight.w500,
height: 1.4,
letterSpacing: 0.1,
color: AppColors.textPrimary,
);
static const TextStyle labelSmall = TextStyle(
fontSize: 12,
fontWeight: FontWeight.w500,
height: 1.4,
letterSpacing: 0.2,
color: AppColors.textSecondary,
);
// ============================================================
// Caption - 辅助文字
// ============================================================
static const TextStyle caption = TextStyle(
fontSize: 11,
fontWeight: FontWeight.w400,
height: 1.4,
color: AppColors.textTertiary,
);
// ============================================================
// Price - 价格专用
// ============================================================
static const TextStyle priceLarge = TextStyle(
fontSize: 28,
fontWeight: FontWeight.w700,
height: 1.2,
color: AppColors.primary,
);
static const TextStyle priceMedium = TextStyle(
fontSize: 20,
fontWeight: FontWeight.w700,
height: 1.2,
color: AppColors.primary,
);
static const TextStyle priceSmall = TextStyle(
fontSize: 16,
fontWeight: FontWeight.w600,
height: 1.2,
color: AppColors.primary,
);
static const TextStyle priceOriginal = TextStyle(
fontSize: 13,
fontWeight: FontWeight.w400,
height: 1.2,
color: AppColors.textTertiary,
decoration: TextDecoration.lineThrough,
);
// ============================================================
// Discount Badge - 折扣标签
// ============================================================
static const TextStyle discountBadge = TextStyle(
fontSize: 12,
fontWeight: FontWeight.w700,
height: 1.0,
color: Colors.white,
);
}