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
116 lines
3.9 KiB
Dart
116 lines
3.9 KiB
Dart
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;
|
|
}),
|
|
),
|
|
);
|
|
}
|
|
}
|