El Impostor v0.1 — app Flutter completa
Juego de deducción social para 3-20 jugadores. Modo un solo móvil completamente funcional. 1000 palabras en 10 categorías. Notas privadas, votación, adivinanza, revancha. Material 3 dark theme. Package: es.freetimelab.elimpostor
This commit is contained in:
115
lib/tema/tema_app.dart
Normal file
115
lib/tema/tema_app.dart
Normal file
@@ -0,0 +1,115 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:google_fonts/google_fonts.dart';
|
||||
|
||||
class TemaApp {
|
||||
static const colorFondo = Color(0xFF121212);
|
||||
static const colorSuperficie = Color(0xFF1E1E1E);
|
||||
static const colorTarjeta = Color(0xFF2A2A2A);
|
||||
static const colorAcento = Color(0xFFE53935); // Rojo impostor
|
||||
static const colorAcentoClaro = Color(0xFFFF6F61);
|
||||
static const colorNaranja = Color(0xFFFF9800);
|
||||
static const colorVerde = Color(0xFF4CAF50);
|
||||
static const colorTexto = Color(0xFFFFFFFF);
|
||||
static const colorTextoSecundario = Color(0xFFB0B0B0);
|
||||
|
||||
static ThemeData obtenerTema() {
|
||||
return ThemeData(
|
||||
useMaterial3: true,
|
||||
brightness: Brightness.dark,
|
||||
scaffoldBackgroundColor: colorFondo,
|
||||
colorScheme: const ColorScheme.dark(
|
||||
primary: colorAcento,
|
||||
secondary: colorNaranja,
|
||||
surface: colorSuperficie,
|
||||
error: colorAcento,
|
||||
),
|
||||
textTheme: GoogleFonts.poppinsTextTheme(
|
||||
const TextTheme(
|
||||
headlineLarge: TextStyle(
|
||||
color: colorTexto,
|
||||
fontWeight: FontWeight.bold,
|
||||
fontSize: 28,
|
||||
),
|
||||
headlineMedium: TextStyle(
|
||||
color: colorTexto,
|
||||
fontWeight: FontWeight.bold,
|
||||
fontSize: 22,
|
||||
),
|
||||
titleLarge: TextStyle(
|
||||
color: colorTexto,
|
||||
fontWeight: FontWeight.w600,
|
||||
fontSize: 18,
|
||||
),
|
||||
titleMedium: TextStyle(
|
||||
color: colorTexto,
|
||||
fontWeight: FontWeight.w500,
|
||||
fontSize: 16,
|
||||
),
|
||||
bodyLarge: TextStyle(color: colorTexto, fontSize: 16),
|
||||
bodyMedium: TextStyle(color: colorTextoSecundario, fontSize: 14),
|
||||
),
|
||||
),
|
||||
cardTheme: CardThemeData(
|
||||
color: colorTarjeta,
|
||||
elevation: 4,
|
||||
shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(16)),
|
||||
),
|
||||
elevatedButtonTheme: ElevatedButtonThemeData(
|
||||
style: ElevatedButton.styleFrom(
|
||||
backgroundColor: colorAcento,
|
||||
foregroundColor: colorTexto,
|
||||
padding: const EdgeInsets.symmetric(horizontal: 32, vertical: 16),
|
||||
shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(12)),
|
||||
textStyle: GoogleFonts.poppins(
|
||||
fontWeight: FontWeight.w600,
|
||||
fontSize: 16,
|
||||
),
|
||||
),
|
||||
),
|
||||
outlinedButtonTheme: OutlinedButtonThemeData(
|
||||
style: OutlinedButton.styleFrom(
|
||||
foregroundColor: colorTexto,
|
||||
side: const BorderSide(color: colorAcento),
|
||||
padding: const EdgeInsets.symmetric(horizontal: 32, vertical: 16),
|
||||
shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(12)),
|
||||
),
|
||||
),
|
||||
inputDecorationTheme: InputDecorationTheme(
|
||||
filled: true,
|
||||
fillColor: colorTarjeta,
|
||||
border: OutlineInputBorder(
|
||||
borderRadius: BorderRadius.circular(12),
|
||||
borderSide: BorderSide.none,
|
||||
),
|
||||
focusedBorder: OutlineInputBorder(
|
||||
borderRadius: BorderRadius.circular(12),
|
||||
borderSide: const BorderSide(color: colorAcento),
|
||||
),
|
||||
labelStyle: const TextStyle(color: colorTextoSecundario),
|
||||
hintStyle: const TextStyle(color: colorTextoSecundario),
|
||||
),
|
||||
appBarTheme: AppBarTheme(
|
||||
backgroundColor: colorFondo,
|
||||
foregroundColor: colorTexto,
|
||||
elevation: 0,
|
||||
titleTextStyle: GoogleFonts.poppins(
|
||||
color: colorTexto,
|
||||
fontWeight: FontWeight.bold,
|
||||
fontSize: 20,
|
||||
),
|
||||
),
|
||||
switchTheme: SwitchThemeData(
|
||||
thumbColor: WidgetStateProperty.resolveWith((states) {
|
||||
if (states.contains(WidgetState.selected)) return colorAcento;
|
||||
return colorTextoSecundario;
|
||||
}),
|
||||
trackColor: WidgetStateProperty.resolveWith((states) {
|
||||
if (states.contains(WidgetState.selected)) {
|
||||
return colorAcento.withValues(alpha: 0.5);
|
||||
}
|
||||
return colorTarjeta;
|
||||
}),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user