Files
Handwerks_app/theme/app_theme.dart
JUSN 9ddce354c0 Feature
ein paar feature aber datenbank macht probleme wenn man aufträge speichern möchge
2026-04-05 12:47:57 +02:00

103 lines
3.6 KiB
Dart

import 'package:flutter/material.dart';
/// HandwerkPro: Dark UI mit Lila-Header und Türkis-Akzenten (Mockup).
class AppTheme {
AppTheme._();
static const Color background = Color(0xFF121212);
static const Color card = Color(0xFF1E1E1E);
static const Color headerPurple = Color(0xFF4A148C);
static const Color headerPurpleLight = Color(0xFF6A1B9A);
static const Color accentCyan = Color(0xFF00E5FF);
static const Color statusOffen = Color(0xFF2196F3);
static const Color statusFertig = Color(0xFF4CAF50);
static const Color statusGeplant = Color(0xFFFF9800);
static ThemeData dark() {
final base = ThemeData(
useMaterial3: true,
brightness: Brightness.dark,
scaffoldBackgroundColor: background,
);
return base.copyWith(
colorScheme: ColorScheme.dark(
surface: background,
primary: accentCyan,
onPrimary: Colors.black,
secondary: headerPurpleLight,
onSecondary: Colors.white,
tertiary: accentCyan,
surfaceContainerHighest: card,
onSurface: Colors.white,
onSurfaceVariant: Color(0xFFB0B0B0),
outline: Color(0xFF404040),
),
appBarTheme: const AppBarTheme(
backgroundColor: headerPurple,
foregroundColor: Colors.white,
elevation: 0,
centerTitle: false,
scrolledUnderElevation: 0,
),
cardTheme: CardThemeData(
color: card,
elevation: 0,
shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(16)),
margin: EdgeInsets.zero,
),
inputDecorationTheme: InputDecorationTheme(
filled: true,
fillColor: card,
hintStyle: const TextStyle(color: Color(0xFF888888)),
labelStyle: const TextStyle(color: Color(0xFFAAAAAA)),
border: OutlineInputBorder(
borderRadius: BorderRadius.circular(12),
borderSide: const BorderSide(color: Color(0xFF404040)),
),
enabledBorder: OutlineInputBorder(
borderRadius: BorderRadius.circular(12),
borderSide: const BorderSide(color: Color(0xFF404040)),
),
focusedBorder: OutlineInputBorder(
borderRadius: BorderRadius.circular(12),
borderSide: const BorderSide(color: accentCyan, width: 1.5),
),
),
filledButtonTheme: FilledButtonThemeData(
style: FilledButton.styleFrom(
backgroundColor: accentCyan,
foregroundColor: Colors.black,
padding: const EdgeInsets.symmetric(horizontal: 24, vertical: 16),
shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(14)),
),
),
floatingActionButtonTheme: const FloatingActionButtonThemeData(
backgroundColor: accentCyan,
foregroundColor: Colors.black,
elevation: 4,
),
navigationBarTheme: NavigationBarThemeData(
backgroundColor: card,
indicatorColor: accentCyan.withValues(alpha: 0.25),
labelTextStyle: WidgetStateProperty.resolveWith((s) {
final sel = s.contains(WidgetState.selected);
return TextStyle(
fontSize: 12,
fontWeight: sel ? FontWeight.w600 : FontWeight.w400,
color: sel ? accentCyan : const Color(0xFF9E9E9E),
);
}),
iconTheme: WidgetStateProperty.resolveWith((s) {
final sel = s.contains(WidgetState.selected);
return IconThemeData(color: sel ? accentCyan : const Color(0xFF9E9E9E));
}),
),
tabBarTheme: TabBarThemeData(
labelColor: accentCyan,
unselectedLabelColor: const Color(0xFF9E9E9E),
indicatorColor: accentCyan,
),
);
}
}