170 lines
4.5 KiB
Dart
170 lines
4.5 KiB
Dart
/// Design system constants for FocusBuddy app
|
|
///
|
|
/// This file contains all magic numbers extracted from the codebase
|
|
/// to ensure consistency and maintainability.
|
|
library;
|
|
|
|
/// Spacing constants following 8px grid system
|
|
class AppSpacing {
|
|
AppSpacing._();
|
|
|
|
static const double xs = 4.0;
|
|
static const double sm = 8.0;
|
|
static const double md = 12.0;
|
|
static const double base = 16.0;
|
|
static const double lg = 20.0;
|
|
static const double xl = 24.0;
|
|
static const double xxl = 32.0;
|
|
static const double xxxl = 40.0;
|
|
static const double huge = 48.0;
|
|
static const double massive = 60.0;
|
|
static const double gigantic = 80.0;
|
|
}
|
|
|
|
/// Duration-related constants
|
|
class AppDurations {
|
|
AppDurations._();
|
|
|
|
// Default focus session duration (minutes)
|
|
static const int defaultFocusDuration = 25;
|
|
|
|
// Available duration options (minutes)
|
|
static const List<int> availableDurations = [15, 25, 45];
|
|
|
|
// Timer tick interval
|
|
static const Duration timerTickInterval = Duration(seconds: 1);
|
|
|
|
// Seconds per minute (for conversions)
|
|
static const int secondsPerMinute = 60;
|
|
|
|
// Notification update interval when app is backgrounded
|
|
static const int notificationUpdateIntervalSeconds = 30;
|
|
|
|
// Animation durations
|
|
static const Duration pageTransition = Duration(milliseconds: 300);
|
|
|
|
// SnackBar display durations
|
|
static const Duration snackBarShort = Duration(seconds: 2);
|
|
static const Duration snackBarMedium = Duration(seconds: 3);
|
|
}
|
|
|
|
/// Onboarding screen constants
|
|
class OnboardingConstants {
|
|
OnboardingConstants._();
|
|
|
|
static const int totalPages = 3;
|
|
static const double horizontalPadding = 32.0;
|
|
static const double emojiSize = 80.0;
|
|
static const double indicatorWidth = 24.0;
|
|
static const double indicatorHeight = 4.0;
|
|
static const double indicatorActiveWidth = 8.0;
|
|
static const double indicatorActiveHeight = 8.0;
|
|
}
|
|
|
|
/// Settings screen constants
|
|
class SettingsConstants {
|
|
SettingsConstants._();
|
|
|
|
static const double iconSize = 16.0;
|
|
static const double sectionSpacing = 20.0;
|
|
static const double optionHeight = 12.0;
|
|
static const double optionSpacing = 2.0;
|
|
static const double radioButtonSize = 20.0;
|
|
static const double radioCheckIconSize = 12.0;
|
|
static const double badgeFontSize = 12.0;
|
|
}
|
|
|
|
/// Profile screen constants
|
|
class ProfileConstants {
|
|
ProfileConstants._();
|
|
|
|
static const double avatarRadius = 40.0;
|
|
static const double avatarEmojiSize = 40.0;
|
|
static const double statDividerHeight = 40.0;
|
|
static const double progressBarHeight = 10.0;
|
|
static const double progressBarRadius = 5.0;
|
|
static const double calendarCellSize = 40.0;
|
|
static const int calendarDisplayDays = 28;
|
|
static const int maxDisplayedAchievements = 6;
|
|
|
|
// Check-in milestones
|
|
static const int weeklyCheckInMilestone = 7;
|
|
}
|
|
|
|
/// Completion screen constants
|
|
class CompletionConstants {
|
|
CompletionConstants._();
|
|
|
|
static const double emojiSize = 64.0;
|
|
}
|
|
|
|
/// Calendar constants (shared between profile and session detail)
|
|
class CalendarConstants {
|
|
CalendarConstants._();
|
|
|
|
static const int displayDays = 28;
|
|
static const int daysOffset = 27; // displayDays - 1
|
|
}
|
|
|
|
/// Points and gamification constants
|
|
class GameConstants {
|
|
GameConstants._();
|
|
|
|
// Points calculation
|
|
static const int pointsPerFocusMinute = 1;
|
|
static const int honestyBonusMinutesPerDistraction = 10;
|
|
|
|
// Check-in rewards
|
|
static const int checkInBasePoints = 5;
|
|
static const int weeklyStreakDays = 7;
|
|
static const int weeklyStreakBonus = 30;
|
|
static const int monthlyStreakDays = 30;
|
|
static const int monthlyStreakBonus = 100;
|
|
|
|
// Level progression
|
|
static const int pointsPerLevel = 100;
|
|
}
|
|
|
|
/// Notification IDs
|
|
class NotificationIds {
|
|
NotificationIds._();
|
|
|
|
static const int complete = 0;
|
|
static const int reminder = 1;
|
|
static const int ongoing = 2;
|
|
}
|
|
|
|
/// Icon sizes
|
|
class IconSizes {
|
|
IconSizes._();
|
|
|
|
static const double small = 12.0;
|
|
static const double medium = 16.0;
|
|
static const double large = 20.0;
|
|
static const double extraLarge = 24.0;
|
|
}
|
|
|
|
/// Font sizes (complementing AppTextStyles)
|
|
class FontSizes {
|
|
FontSizes._();
|
|
|
|
static const double caption = 12.0;
|
|
static const double body = 14.0;
|
|
static const double bodyLarge = 16.0;
|
|
static const double subtitle = 18.0;
|
|
static const double title = 20.0;
|
|
static const double heading = 28.0;
|
|
static const double display = 32.0;
|
|
}
|
|
|
|
/// Border radius values
|
|
class BorderRadii {
|
|
BorderRadii._();
|
|
|
|
static const double small = 8.0;
|
|
static const double medium = 12.0;
|
|
static const double large = 16.0;
|
|
static const double extraLarge = 24.0;
|
|
static const double circular = 999.0;
|
|
}
|