- 主色 #635BFF→#14B8A6 (薄荷绿) - 浅紫 #EDEBFF→#E6FAF6 (极浅薄荷) - 深紫 #4B44D6→#0F9D8E (深薄荷) - 渐变紫→薄荷渐变 - 全局13种紫色映射替换
88 lines
3.5 KiB
Dart
88 lines
3.5 KiB
Dart
import 'package:flutter/material.dart';
|
|
|
|
/// 健康管家 — Fresh Air 清新风
|
|
/// 薄荷绿主调 · 轻透白底 · 珊瑚点缀
|
|
class AppTheme {
|
|
AppTheme._();
|
|
|
|
static const Color primary = Color(0xFF14B8A6); // 薄荷绿
|
|
static const Color primaryLight = Color(0xFFE6FAF6); // 极浅薄荷
|
|
static const Color primaryDark = Color(0xFF0F9D8E); // 深薄荷
|
|
|
|
static const Color bg = Color(0xFFF6F9FB); // 清透底
|
|
static const Color surface = Color(0xFFFFFFFF); // 卡片白
|
|
|
|
static const Color text = Color(0xFF1C2B33);
|
|
static const Color textSub = Color(0xFF6B7C85);
|
|
static const Color textHint = Color(0xFFA5B4BD);
|
|
|
|
static const Color success = Color(0xFF10B981);
|
|
static const Color error = Color(0xFFF56C6C);
|
|
static const Color warning = Color(0xFFF59E0B);
|
|
static const Color accent = Color(0xFFFF7B6B); // 珊瑚
|
|
|
|
static const Color border = Color(0xFFE5EBF0);
|
|
static const Color divider = Color(0xFFEEF2F6);
|
|
|
|
static ThemeData get lightTheme => ThemeData(
|
|
useMaterial3: true,
|
|
colorScheme: ColorScheme.fromSeed(
|
|
seedColor: primary,
|
|
primary: primary,
|
|
surface: bg,
|
|
brightness: Brightness.light,
|
|
),
|
|
scaffoldBackgroundColor: bg,
|
|
|
|
appBarTheme: const AppBarTheme(
|
|
backgroundColor: surface,
|
|
foregroundColor: text,
|
|
elevation: 0,
|
|
centerTitle: true,
|
|
scrolledUnderElevation: 0,
|
|
),
|
|
|
|
cardTheme: CardThemeData(
|
|
color: surface,
|
|
elevation: 0,
|
|
shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(16)),
|
|
margin: EdgeInsets.zero,
|
|
),
|
|
|
|
inputDecorationTheme: InputDecorationTheme(
|
|
filled: true,
|
|
fillColor: const Color(0xFFF2F6F9),
|
|
contentPadding: const EdgeInsets.symmetric(horizontal: 14, vertical: 12),
|
|
border: OutlineInputBorder(borderRadius: BorderRadius.circular(12), borderSide: BorderSide.none),
|
|
enabledBorder: OutlineInputBorder(borderRadius: BorderRadius.circular(12), borderSide: BorderSide.none),
|
|
focusedBorder: OutlineInputBorder(borderRadius: BorderRadius.circular(12), borderSide: const BorderSide(color: primary, width: 1.5)),
|
|
hintStyle: const TextStyle(color: textHint, fontSize: 15),
|
|
),
|
|
|
|
elevatedButtonTheme: ElevatedButtonThemeData(
|
|
style: ElevatedButton.styleFrom(
|
|
backgroundColor: primary,
|
|
foregroundColor: Colors.white,
|
|
minimumSize: const Size(double.infinity, 48),
|
|
shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(14)),
|
|
textStyle: const TextStyle(fontSize: 16, fontWeight: FontWeight.w600),
|
|
elevation: 0,
|
|
),
|
|
),
|
|
|
|
dialogTheme: DialogThemeData(
|
|
shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(22)),
|
|
),
|
|
|
|
textTheme: const TextTheme(
|
|
headlineLarge: TextStyle(fontSize: 24, fontWeight: FontWeight.w700, color: text),
|
|
titleLarge: TextStyle(fontSize: 20, fontWeight: FontWeight.w600, color: text),
|
|
titleMedium: TextStyle(fontSize: 18, fontWeight: FontWeight.w600, color: text),
|
|
bodyLarge: TextStyle(fontSize: 16, color: text, height: 1.5),
|
|
bodyMedium: TextStyle(fontSize: 15, color: textSub, height: 1.4),
|
|
labelMedium: TextStyle(fontSize: 13, color: textSub),
|
|
labelSmall: TextStyle(fontSize: 11, color: textHint),
|
|
),
|
|
);
|
|
}
|