import 'package:flutter/material.dart'; import 'app_colors.dart'; /// Theme extension for gradients and colors not covered by [ColorScheme]. @immutable class AppThemeExtras extends ThemeExtension { const AppThemeExtras({ required this.dashboardBackgroundGradient, required this.dashboardGradientStops, required this.heroProgressStart, required this.heroProgressEnd, required this.actionCardGradientStart, required this.actionCardGradientEnd, required this.authBackgroundGradient, required this.dashboardHeaderTextColor, }); final List dashboardBackgroundGradient; final List dashboardGradientStops; final Color heroProgressStart; final Color heroProgressEnd; final Color actionCardGradientStart; final Color actionCardGradientEnd; final List authBackgroundGradient; final Color dashboardHeaderTextColor; static final AppThemeExtras light = AppThemeExtras( dashboardBackgroundGradient: [ AppColors.primaryTeal, AppColors.primaryTeal.withValues(alpha: 0.8), AppColors.primaryOrange, LightColors.background, ], dashboardGradientStops: [0.0, 0.2, 0.6, 1.0], heroProgressStart: Colors.white, heroProgressEnd: Color(0xFFF8F9FA), actionCardGradientStart: AppColors.primaryTeal, actionCardGradientEnd: AppColors.gradientEnd, authBackgroundGradient: [ const Color(0xFFD4E8E8), const Color(0xFFE8D4C0), const Color(0xFFD8E0E8), ], dashboardHeaderTextColor: Colors.white, ); static final AppThemeExtras dark = AppThemeExtras( dashboardBackgroundGradient: [ DarkColors.surfaceVariant, DarkColors.surface, DarkColors.background, DarkColors.background, ], dashboardGradientStops: [0.0, 0.25, 0.55, 1.0], heroProgressStart: Colors.white.withValues(alpha: 0.9), heroProgressEnd: Colors.white.withValues(alpha: 0.55), actionCardGradientStart: DarkBrandColors.gradientStart, actionCardGradientEnd: DarkBrandColors.gradientEnd, authBackgroundGradient: [ DarkColors.surfaceVariant, DarkColors.surface, DarkColors.background, ], dashboardHeaderTextColor: DarkColors.textPrimary, ); static AppThemeExtras of(BuildContext context) { return Theme.of(context).extension() ?? light; } @override AppThemeExtras copyWith({ List? dashboardBackgroundGradient, List? dashboardGradientStops, Color? heroProgressStart, Color? heroProgressEnd, Color? actionCardGradientStart, Color? actionCardGradientEnd, List? authBackgroundGradient, Color? dashboardHeaderTextColor, }) { return AppThemeExtras( dashboardBackgroundGradient: dashboardBackgroundGradient ?? this.dashboardBackgroundGradient, dashboardGradientStops: dashboardGradientStops ?? this.dashboardGradientStops, heroProgressStart: heroProgressStart ?? this.heroProgressStart, heroProgressEnd: heroProgressEnd ?? this.heroProgressEnd, actionCardGradientStart: actionCardGradientStart ?? this.actionCardGradientStart, actionCardGradientEnd: actionCardGradientEnd ?? this.actionCardGradientEnd, authBackgroundGradient: authBackgroundGradient ?? this.authBackgroundGradient, dashboardHeaderTextColor: dashboardHeaderTextColor ?? this.dashboardHeaderTextColor, ); } @override AppThemeExtras lerp(ThemeExtension? other, double t) { if (other is! AppThemeExtras) return this; return t < 0.5 ? this : other; } }