125 lines
4.6 KiB
Dart
125 lines
4.6 KiB
Dart
import 'package:flutter/material.dart';
|
|
|
|
class AppTheme {
|
|
// ── Colores principales ──────────────────────────────────────────────────
|
|
static const Color primary = Color(0xFF1D9E75);
|
|
static const Color primaryDark = Color(0xFF0F6E56);
|
|
static const Color primaryLight = Color(0xFFE1F5EE);
|
|
static const Color primaryMid = Color(0xFF9FE1CB);
|
|
|
|
static const Color blue = Color(0xFF185FA5);
|
|
static const Color blueLight = Color(0xFFE6F1FB);
|
|
|
|
static const Color amber = Color(0xFF854F0B);
|
|
static const Color amberLight = Color(0xFFFAEEDA);
|
|
|
|
static const Color danger = Color(0xFFE24B4A);
|
|
static const Color dangerLight = Color(0xFFFCEBEB);
|
|
|
|
static const Color textPrimary = Color(0xFF1A1A1A);
|
|
static const Color textSecondary = Color(0xFF6B7280);
|
|
static const Color textHint = Color(0xFFAAAAAA);
|
|
|
|
static const Color surface = Color(0xFFFFFFFF);
|
|
static const Color background = Color(0xFFF5F7F5);
|
|
static const Color border = Color(0xFFE5E7EB);
|
|
static const Color borderLight = Color(0xFFF0F2F0);
|
|
|
|
// ── Radios ───────────────────────────────────────────────────────────────
|
|
static const double radiusSm = 8.0;
|
|
static const double radiusMd = 12.0;
|
|
static const double radiusLg = 16.0;
|
|
static const double radiusXl = 24.0;
|
|
static const double radiusFull = 100.0;
|
|
|
|
// ── Sombras ──────────────────────────────────────────────────────────────
|
|
static List<BoxShadow> get cardShadow => [
|
|
BoxShadow(
|
|
color: Colors.black.withOpacity(0.06),
|
|
blurRadius: 12,
|
|
offset: const Offset(0, 4),
|
|
),
|
|
];
|
|
|
|
static List<BoxShadow> get softShadow => [
|
|
BoxShadow(
|
|
color: Colors.black.withOpacity(0.04),
|
|
blurRadius: 8,
|
|
offset: const Offset(0, 2),
|
|
),
|
|
];
|
|
|
|
// ── ThemeData ────────────────────────────────────────────────────────────
|
|
static ThemeData get lightTheme => ThemeData(
|
|
useMaterial3: true,
|
|
fontFamily: 'SF Pro Display',
|
|
colorScheme: ColorScheme.fromSeed(
|
|
seedColor: primary,
|
|
primary: primary,
|
|
secondary: primaryDark,
|
|
surface: surface,
|
|
background: background,
|
|
),
|
|
scaffoldBackgroundColor: background,
|
|
appBarTheme: const AppBarTheme(
|
|
backgroundColor: primary,
|
|
foregroundColor: Colors.white,
|
|
elevation: 0,
|
|
centerTitle: false,
|
|
titleTextStyle: TextStyle(
|
|
fontSize: 18,
|
|
fontWeight: FontWeight.w600,
|
|
color: Colors.white,
|
|
),
|
|
),
|
|
elevatedButtonTheme: ElevatedButtonThemeData(
|
|
style: ElevatedButton.styleFrom(
|
|
backgroundColor: primary,
|
|
foregroundColor: Colors.white,
|
|
elevation: 0,
|
|
minimumSize: const Size(double.infinity, 52),
|
|
shape: RoundedRectangleBorder(
|
|
borderRadius: BorderRadius.circular(radiusMd),
|
|
),
|
|
textStyle: const TextStyle(
|
|
fontSize: 15,
|
|
fontWeight: FontWeight.w600,
|
|
),
|
|
),
|
|
),
|
|
outlinedButtonTheme: OutlinedButtonThemeData(
|
|
style: OutlinedButton.styleFrom(
|
|
foregroundColor: Colors.white,
|
|
side: const BorderSide(color: Colors.white54, width: 1.5),
|
|
minimumSize: const Size(double.infinity, 52),
|
|
shape: RoundedRectangleBorder(
|
|
borderRadius: BorderRadius.circular(radiusMd),
|
|
),
|
|
textStyle: const TextStyle(
|
|
fontSize: 15,
|
|
fontWeight: FontWeight.w600,
|
|
),
|
|
),
|
|
),
|
|
inputDecorationTheme: InputDecorationTheme(
|
|
filled: true,
|
|
fillColor: surface,
|
|
contentPadding: const EdgeInsets.symmetric(horizontal: 14, vertical: 12),
|
|
border: OutlineInputBorder(
|
|
borderRadius: BorderRadius.circular(radiusSm),
|
|
borderSide: const BorderSide(color: border),
|
|
),
|
|
enabledBorder: OutlineInputBorder(
|
|
borderRadius: BorderRadius.circular(radiusSm),
|
|
borderSide: const BorderSide(color: border),
|
|
),
|
|
focusedBorder: OutlineInputBorder(
|
|
borderRadius: BorderRadius.circular(radiusSm),
|
|
borderSide: const BorderSide(color: primary, width: 1.5),
|
|
),
|
|
labelStyle: const TextStyle(color: textSecondary, fontSize: 13),
|
|
hintStyle: const TextStyle(color: textHint, fontSize: 13),
|
|
),
|
|
);
|
|
}
|