refactor(theme): replace hardcoded colors with AppColors system

- Unify color palette across login, dashboard, admin, and player screens
- Replace Colors.white/black with AppColors semantic colors
- Use AppColors.backgroundGradient instead of hardcoded gradients
- Apply primary teal accent (#00A0D2) consistently
- Fix text hierarchy with textPrimary/Secondary/Tertiary
- Improve visual consistency with Apple TV theme

Changes:
- login_screen.dart: gradient, icon, text colors
- dashboard_screen.dart: border, text, background colors
- admin_panel.dart: all Colors.white/white70 → AppColors
- player_screen.dart: background, overlay, text colors

Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
This commit is contained in:
GitHub CopilotandClaude Haiku 4.5 committed 2026-03-26 11:49:46 +01:00
1 parent 0c9d0e50ec
commit a3a4b6f0f2
4 files changed
+23 -23

No files matched your search

+6 -6
View File
@@ -80,13 +80,13 @@ class _AdminContentState extends ConsumerState<AdminContent>
padding: const EdgeInsets.all(8),
showBorder: false,
onTap: () => context.go('/playlists'),
child: const Icon(Icons.arrow_back, color: Colors.white70),
child: const Icon(Icons.arrow_back, color: AppColors.textSecondary),
),
const SizedBox(width: 16),
Text(
'Administration',
style: Theme.of(context).textTheme.headlineMedium?.copyWith(
color: Colors.white,
color: AppColors.textPrimary,
fontWeight: FontWeight.bold,
),
),
@@ -147,7 +147,7 @@ class _AdminContentState extends ConsumerState<AdminContent>
Icon(
icon,
size: 18,
color: isSelected ? Colors.black : Colors.white70,
color: isSelected ? AppColors.textPrimary : AppColors.textSecondary,
),
const SizedBox(width: 8),
Text(
@@ -155,7 +155,7 @@ class _AdminContentState extends ConsumerState<AdminContent>
style: GoogleFonts.inter(
fontWeight: FontWeight.w600,
fontSize: 14,
color: isSelected ? Colors.black : Colors.white70,
color: isSelected ? AppColors.textPrimary : AppColors.textSecondary,
),
),
],
@@ -187,7 +187,7 @@ class _PlaylistsTab extends ConsumerWidget {
style: Theme.of(context)
.textTheme
.bodyLarge
?.copyWith(color: Colors.white70),
?.copyWith(color: AppColors.textSecondary),
),
GradientButton(
label: 'Add Playlist',
@@ -462,7 +462,7 @@ class _UsersTab extends ConsumerWidget {
style: Theme.of(context)
.textTheme
.bodyLarge
?.copyWith(color: Colors.white70),
?.copyWith(color: AppColors.textSecondary),
),
GradientButton(
label: 'Create User',
+6 -6
View File
@@ -69,7 +69,7 @@ class _LoginScreenState extends ConsumerState<LoginScreen> {
shape: BoxShape.circle,
gradient: RadialGradient(
colors: [
Colors.white.withOpacity(0.05),
AppColors.textPrimary.withOpacity(0.05),
Colors.transparent,
],
radius: 0.5,
@@ -118,7 +118,7 @@ class _LoginScreenState extends ConsumerState<LoginScreen> {
borderRadius: BorderRadius.circular(32),
boxShadow: [
BoxShadow(
color: Colors.black.withOpacity(0.5),
color: AppColors.background.withOpacity(0.5),
blurRadius: 30,
offset: const Offset(0, 15),
),
@@ -239,13 +239,13 @@ class _LoginScreenState extends ConsumerState<LoginScreen> {
TvFocusableCard(
onTap: _handleLogin,
scaleFactor: 1.03,
focusColor: Colors.white,
focusColor: AppColors.primary,
borderRadius: 16,
child: Container(
height: 60,
alignment: Alignment.center,
decoration: BoxDecoration(
color: Colors.white,
color: AppColors.textPrimary,
borderRadius: BorderRadius.circular(16),
),
child: authState.isLoading
@@ -254,13 +254,13 @@ class _LoginScreenState extends ConsumerState<LoginScreen> {
height: 24,
child: CircularProgressIndicator(
strokeWidth: 2.5,
color: Colors.black,
color: AppColors.primary,
),
)
: Text(
'Sign In',
style: GoogleFonts.inter(
color: Colors.black,
color: AppColors.primary,
fontSize: 18,
fontWeight: FontWeight.w600,
),
@@ -96,7 +96,7 @@ class _DashboardScreenState extends ConsumerState<DashboardScreen> {
// blur is hardcoded in GlassContainer (15), so we don't pass it
// border is bool, borderColor allows customization
hasBorder: true,
borderColor: Colors.white.withOpacity(0.1),
borderColor: AppColors.border,
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
@@ -119,7 +119,7 @@ class _DashboardScreenState extends ConsumerState<DashboardScreen> {
),
child: const Icon(
Icons.play_arrow_rounded,
color: Colors.white,
color: AppColors.textPrimary,
size: 28,
),
),
@@ -155,7 +155,7 @@ class _DashboardScreenState extends ConsumerState<DashboardScreen> {
child: Icon(
_icons[index],
color: isSelected
? Colors.white
? AppColors.textPrimary
: AppColors.textSecondary,
size: 24,
),
@@ -175,10 +175,10 @@ class _DashboardScreenState extends ConsumerState<DashboardScreen> {
scaleFactor: 1.1,
child: CircleAvatar(
radius: 20,
backgroundColor: Colors.white.withOpacity(0.1),
backgroundColor: AppColors.primary.withOpacity(0.1),
child: const Icon(
Icons.person,
color: Colors.white70,
color: AppColors.textSecondary,
size: 20,
),
),
+6 -6
View File
@@ -379,7 +379,7 @@ class _PlayerScreenState extends ConsumerState<PlayerScreen> {
// LITE PLAYER MODE for Live TV - Simplified UI (no BackdropFilter)
if (isLiveTV) {
return Scaffold(
backgroundColor: Colors.black,
backgroundColor: AppColors.background,
body: Stack(
fit: StackFit.expand,
children: [
@@ -420,7 +420,7 @@ class _PlayerScreenState extends ConsumerState<PlayerScreen> {
begin: Alignment.topCenter,
end: Alignment.bottomCenter,
colors: [
Colors.black.withOpacity(0.8),
AppColors.background.withOpacity(0.8),
Colors.transparent,
],
),
@@ -451,7 +451,7 @@ class _PlayerScreenState extends ConsumerState<PlayerScreen> {
.toString()
: widget.title,
style: GoogleFonts.outfit(
color: Colors.white,
color: AppColors.textPrimary,
fontSize: 18,
fontWeight: FontWeight.w600,
),
@@ -490,17 +490,17 @@ class _PlayerScreenState extends ConsumerState<PlayerScreen> {
vertical: isSmallScreen ? 12 : 16,
),
decoration: BoxDecoration(
color: const Color(0xFF1A1A2E).withOpacity(0.95),
color: AppColors.surface.withOpacity(0.95),
borderRadius: BorderRadius.circular(24),
boxShadow: [
BoxShadow(
color: Colors.black.withOpacity(0.3),
color: AppColors.background.withOpacity(0.3),
blurRadius: 10,
spreadRadius: 2,
),
],
border: Border.all(
color: Colors.white.withOpacity(0.15),
color: AppColors.textPrimary.withOpacity(0.15),
),
),
child: isSmallScreen