Resolve 62 linting issues identified by flutter analyze, reducing total issues from 79 to 17. All critical warnings addressed. Changes: - Replace deprecated withOpacity() with withValues(alpha:) (25 instances) - Remove unused imports from 9 files - Remove unused variables and fields (6 instances) - Fix Riverpod 3.0 state access violations in settings_page - Remove unnecessary null-aware operators in navigation_page (6 instances) - Fix unnecessary type casts in providers (4 instances) - Remove unused methods: _getDarkMapStyle, _showPermissionDialog - Simplify hover state management by removing unused _isHovered fields Remaining 17 issues are info-level style suggestions and defensive programming patterns that don't impact functionality. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
335 lines
8.8 KiB
Dart
335 lines
8.8 KiB
Dart
import 'package:flutter/material.dart';
|
|
import 'color_system.dart';
|
|
|
|
/// Svrnty Gradient System
|
|
/// Predefined gradients for status bars, progress indicators, and backgrounds
|
|
class AppGradients {
|
|
// Prevent instantiation
|
|
AppGradients._();
|
|
|
|
// ============================================
|
|
// DELIVERY STATUS GRADIENTS
|
|
// ============================================
|
|
|
|
/// Pending status gradient (Slate Gray)
|
|
static const LinearGradient gradientStatusPending = LinearGradient(
|
|
begin: Alignment.centerLeft,
|
|
end: Alignment.centerRight,
|
|
colors: [
|
|
SvrntyColors.statusPending,
|
|
Color(0xFF506576), // Slightly different shade for gradient effect
|
|
],
|
|
);
|
|
|
|
/// In Transit status gradient (Teal Blue)
|
|
static const LinearGradient gradientStatusInTransit = LinearGradient(
|
|
begin: Alignment.centerLeft,
|
|
end: Alignment.centerRight,
|
|
colors: [
|
|
SvrntyColors.statusInTransit,
|
|
Color(0xFF647A91), // Lighter teal for gradient
|
|
],
|
|
);
|
|
|
|
/// Completed status gradient (Green/Success)
|
|
static const LinearGradient gradientStatusCompleted = LinearGradient(
|
|
begin: Alignment.centerLeft,
|
|
end: Alignment.centerRight,
|
|
colors: [
|
|
SvrntyColors.statusCompleted,
|
|
Color(0xFF4ADE80), // Lighter green for gradient
|
|
],
|
|
);
|
|
|
|
/// Cancelled status gradient (Light Gray)
|
|
static const LinearGradient gradientStatusCancelled = LinearGradient(
|
|
begin: Alignment.centerLeft,
|
|
end: Alignment.centerRight,
|
|
colors: [
|
|
SvrntyColors.statusCancelled,
|
|
Color(0xFFC5CBD2), // Darker gray for gradient
|
|
],
|
|
);
|
|
|
|
/// Failed status gradient (Red/Error)
|
|
static const LinearGradient gradientStatusFailed = LinearGradient(
|
|
begin: Alignment.centerLeft,
|
|
end: Alignment.centerRight,
|
|
colors: [
|
|
SvrntyColors.statusFailed,
|
|
Color(0xFFFF7D7D), // Lighter red for gradient
|
|
],
|
|
);
|
|
|
|
// ============================================
|
|
// PROGRESS INDICATOR GRADIENTS
|
|
// ============================================
|
|
|
|
/// Progress bar gradient (Blue to transparent)
|
|
static LinearGradient gradientProgress({
|
|
required Color color,
|
|
bool horizontal = true,
|
|
}) {
|
|
return LinearGradient(
|
|
begin: horizontal ? Alignment.centerLeft : Alignment.topCenter,
|
|
end: horizontal ? Alignment.centerRight : Alignment.bottomCenter,
|
|
colors: [
|
|
color,
|
|
color.withValues(alpha: 0.8),
|
|
],
|
|
);
|
|
}
|
|
|
|
/// Success progress gradient
|
|
static const LinearGradient gradientProgressSuccess = LinearGradient(
|
|
begin: Alignment.centerLeft,
|
|
end: Alignment.centerRight,
|
|
colors: [
|
|
SvrntyColors.success,
|
|
Color(0xFF4ADE80), // Lighter green
|
|
],
|
|
);
|
|
|
|
/// Warning progress gradient
|
|
static const LinearGradient gradientProgressWarning = LinearGradient(
|
|
begin: Alignment.centerLeft,
|
|
end: Alignment.centerRight,
|
|
colors: [
|
|
SvrntyColors.warning,
|
|
Color(0xFFFBBF24), // Lighter amber
|
|
],
|
|
);
|
|
|
|
/// Error progress gradient
|
|
static const LinearGradient gradientProgressError = LinearGradient(
|
|
begin: Alignment.centerLeft,
|
|
end: Alignment.centerRight,
|
|
colors: [
|
|
SvrntyColors.error,
|
|
Color(0xFFFF7D7D), // Lighter red
|
|
],
|
|
);
|
|
|
|
/// Info progress gradient
|
|
static const LinearGradient gradientProgressInfo = LinearGradient(
|
|
begin: Alignment.centerLeft,
|
|
end: Alignment.centerRight,
|
|
colors: [
|
|
SvrntyColors.info,
|
|
Color(0xFF5B9BFF), // Lighter blue
|
|
],
|
|
);
|
|
|
|
// ============================================
|
|
// BRAND GRADIENTS
|
|
// ============================================
|
|
|
|
/// Primary brand gradient (Crimson Red)
|
|
static const LinearGradient gradientPrimary = LinearGradient(
|
|
begin: Alignment.topLeft,
|
|
end: Alignment.bottomRight,
|
|
colors: [
|
|
SvrntyColors.crimsonRed,
|
|
Color(0xFFC44D58), // Slightly darker shade
|
|
],
|
|
);
|
|
|
|
/// Secondary brand gradient (Slate Blue)
|
|
static const LinearGradient gradientSecondary = LinearGradient(
|
|
begin: Alignment.topLeft,
|
|
end: Alignment.bottomRight,
|
|
colors: [
|
|
SvrntyColors.darkSlate,
|
|
SvrntyColors.slateGray,
|
|
],
|
|
);
|
|
|
|
/// Accent gradient (Crimson to Slate)
|
|
static const LinearGradient gradientAccent = LinearGradient(
|
|
begin: Alignment.topLeft,
|
|
end: Alignment.bottomRight,
|
|
colors: [
|
|
SvrntyColors.crimsonRed,
|
|
SvrntyColors.darkSlate,
|
|
],
|
|
);
|
|
|
|
// ============================================
|
|
// BACKGROUND GRADIENTS
|
|
// ============================================
|
|
|
|
/// Light background gradient
|
|
static const LinearGradient gradientBackgroundLight = LinearGradient(
|
|
begin: Alignment.topLeft,
|
|
end: Alignment.bottomRight,
|
|
colors: [
|
|
Color(0xFFFAFAFC),
|
|
Color(0xFFF5F7FA),
|
|
],
|
|
);
|
|
|
|
/// Dark background gradient
|
|
static const LinearGradient gradientBackgroundDark = LinearGradient(
|
|
begin: Alignment.topLeft,
|
|
end: Alignment.bottomRight,
|
|
colors: [
|
|
Color(0xFF1A1C1E),
|
|
Color(0xFF2A2D34),
|
|
],
|
|
);
|
|
|
|
/// Elevated surface gradient (light)
|
|
static const LinearGradient gradientElevatedLight = LinearGradient(
|
|
begin: Alignment.topCenter,
|
|
end: Alignment.bottomCenter,
|
|
colors: [
|
|
Color(0xFFFFFFFF),
|
|
Color(0xFFF5F7FA),
|
|
],
|
|
);
|
|
|
|
/// Elevated surface gradient (dark)
|
|
static const LinearGradient gradientElevatedDark = LinearGradient(
|
|
begin: Alignment.topCenter,
|
|
end: Alignment.bottomCenter,
|
|
colors: [
|
|
Color(0xFF2A2D34),
|
|
Color(0xFF1F2123),
|
|
],
|
|
);
|
|
|
|
// ============================================
|
|
// OVERLAY GRADIENTS
|
|
// ============================================
|
|
|
|
/// Dark overlay gradient (for images)
|
|
static const LinearGradient gradientOverlayDark = LinearGradient(
|
|
begin: Alignment.topCenter,
|
|
end: Alignment.bottomCenter,
|
|
colors: [
|
|
Color(0x00000000), // Transparent at top
|
|
Color(0x4D000000), // Dark at bottom
|
|
],
|
|
);
|
|
|
|
/// Light overlay gradient
|
|
static const LinearGradient gradientOverlayLight = LinearGradient(
|
|
begin: Alignment.topCenter,
|
|
end: Alignment.bottomCenter,
|
|
colors: [
|
|
Color(0x00FFFFFF), // Transparent at top
|
|
Color(0x4DFFFFFF), // Light at bottom
|
|
],
|
|
);
|
|
|
|
/// Vignette gradient (darkened edges)
|
|
static const RadialGradient gradientVignette = RadialGradient(
|
|
center: Alignment.center,
|
|
radius: 1.2,
|
|
colors: [
|
|
Color(0x00000000),
|
|
Color(0x80000000),
|
|
],
|
|
);
|
|
|
|
// ============================================
|
|
// SHIMMER GRADIENTS (for loading states)
|
|
// ============================================
|
|
|
|
/// Shimmer gradient light theme
|
|
static const LinearGradient gradientShimmerLight = LinearGradient(
|
|
begin: Alignment.centerLeft,
|
|
end: Alignment.centerRight,
|
|
colors: [
|
|
Color(0xFFFFFFFF),
|
|
Color(0x80F0F0F0),
|
|
Color(0xFFFFFFFF),
|
|
],
|
|
stops: [0.1, 0.5, 0.9],
|
|
);
|
|
|
|
/// Shimmer gradient dark theme
|
|
static const LinearGradient gradientShimmerDark = LinearGradient(
|
|
begin: Alignment.centerLeft,
|
|
end: Alignment.centerRight,
|
|
colors: [
|
|
Color(0xFF2A2D34),
|
|
Color(0xFF383940),
|
|
Color(0xFF2A2D34),
|
|
],
|
|
stops: [0.1, 0.5, 0.9],
|
|
);
|
|
|
|
// ============================================
|
|
// UTILITY METHODS
|
|
// ============================================
|
|
|
|
/// Get status gradient based on delivery status
|
|
static LinearGradient getStatusGradient(String status) {
|
|
switch (status.toLowerCase()) {
|
|
case 'pending':
|
|
return gradientStatusPending;
|
|
case 'in_transit':
|
|
case 'in_progress':
|
|
case 'inprogress':
|
|
return gradientStatusInTransit;
|
|
case 'completed':
|
|
case 'done':
|
|
return gradientStatusCompleted;
|
|
case 'cancelled':
|
|
case 'skipped':
|
|
return gradientStatusCancelled;
|
|
case 'failed':
|
|
return gradientStatusFailed;
|
|
default:
|
|
return gradientStatusPending;
|
|
}
|
|
}
|
|
|
|
/// Get progress gradient based on status
|
|
static LinearGradient getProgressGradient(String status) {
|
|
switch (status.toLowerCase()) {
|
|
case 'success':
|
|
return gradientProgressSuccess;
|
|
case 'warning':
|
|
return gradientProgressWarning;
|
|
case 'error':
|
|
return gradientProgressError;
|
|
case 'info':
|
|
return gradientProgressInfo;
|
|
default:
|
|
return gradientProgressSuccess;
|
|
}
|
|
}
|
|
|
|
/// Create a custom gradient with opacity
|
|
static LinearGradient withOpacity(
|
|
LinearGradient gradient,
|
|
double opacity,
|
|
) {
|
|
return LinearGradient(
|
|
begin: gradient.begin,
|
|
end: gradient.end,
|
|
colors: gradient.colors
|
|
.map((color) => color.withValues(alpha: opacity))
|
|
.toList(),
|
|
stops: gradient.stops,
|
|
);
|
|
}
|
|
|
|
/// Create a directional gradient
|
|
static LinearGradient directional({
|
|
required List<Color> colors,
|
|
required Alignment begin,
|
|
required Alignment end,
|
|
List<double>? stops,
|
|
}) {
|
|
return LinearGradient(
|
|
begin: begin,
|
|
end: end,
|
|
colors: colors,
|
|
stops: stops,
|
|
);
|
|
}
|
|
}
|