velmart-picker/lib/core/theme/app_theme.dart
Fibe Agent 5ba2691eac feat: initial Velmart Picker Flutter app
- All 5 batch steps: Picking, Sorting, Clarification, Slots, Handoff
- go_router navigation with step indicator
- graphql_flutter client wired up (endpoint via env var)
- Mock data layer swappable with real GraphQL service
- Item types: normal, cold, frozen, alcohol, clarify
- Storage slot assignment (cell/freezer/fridge)
2026-04-23 21:43:07 +00:00

89 lines
3.8 KiB
Dart

import 'package:flutter/material.dart';
class AppColors {
static const Color primary = Color(0xFF1B5E20);
static const Color primaryLight = Color(0xFF388E3C);
static const Color accent = Color(0xFFFF6F00);
static const Color surface = Color(0xFFFFFFFF);
static const Color background = Color(0xFFF5F5F5);
static const Color cardBackground = Color(0xFFFFFFFF);
static const Color textPrimary = Color(0xFF1A1A1A);
static const Color textSecondary = Color(0xFF757575);
static const Color divider = Color(0xFFE0E0E0);
static const Color success = Color(0xFF2E7D32);
static const Color warning = Color(0xFFF57F17);
static const Color error = Color(0xFFC62828);
static const Color info = Color(0xFF0277BD);
// Status colors
static const Color statusNew = Color(0xFF1565C0);
static const Color statusInProgress = Color(0xFFE65100);
static const Color statusPicked = Color(0xFF2E7D32);
static const Color statusStored = Color(0xFF6A1B9A);
static const Color statusIssued = Color(0xFF424242);
// Item type colors
static const Color itemNormal = Color(0xFFFFFFFF);
static const Color itemCold = Color(0xFFE3F2FD);
static const Color itemFrozen = Color(0xFFE8EAF6);
static const Color itemAlcohol = Color(0xFFFFF8E1);
static const Color itemClarify = Color(0xFFFFF3E0);
}
class AppTheme {
static ThemeData get theme => ThemeData(
useMaterial3: true,
colorScheme: ColorScheme.fromSeed(
seedColor: AppColors.primary,
primary: AppColors.primary,
secondary: AppColors.accent,
surface: AppColors.surface,
error: AppColors.error,
),
scaffoldBackgroundColor: AppColors.background,
appBarTheme: const AppBarTheme(
backgroundColor: AppColors.primary,
foregroundColor: Colors.white,
elevation: 0,
centerTitle: false,
titleTextStyle: TextStyle(
fontSize: 18,
fontWeight: FontWeight.w600,
color: Colors.white,
),
),
cardTheme: CardTheme(
elevation: 1,
color: AppColors.cardBackground,
shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(12)),
margin: const EdgeInsets.symmetric(horizontal: 16, vertical: 4),
),
elevatedButtonTheme: ElevatedButtonThemeData(
style: ElevatedButton.styleFrom(
backgroundColor: AppColors.primary,
foregroundColor: Colors.white,
minimumSize: const Size(double.infinity, 52),
shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(12)),
textStyle: const TextStyle(fontSize: 16, fontWeight: FontWeight.w600),
),
),
textTheme: const TextTheme(
headlineMedium: TextStyle(fontSize: 24, fontWeight: FontWeight.bold, color: AppColors.textPrimary),
headlineSmall: TextStyle(fontSize: 20, fontWeight: FontWeight.bold, color: AppColors.textPrimary),
titleLarge: TextStyle(fontSize: 18, fontWeight: FontWeight.w600, color: AppColors.textPrimary),
titleMedium: TextStyle(fontSize: 16, fontWeight: FontWeight.w600, color: AppColors.textPrimary),
bodyLarge: TextStyle(fontSize: 16, color: AppColors.textPrimary),
bodyMedium: TextStyle(fontSize: 14, color: AppColors.textPrimary),
bodySmall: TextStyle(fontSize: 12, color: AppColors.textSecondary),
labelLarge: TextStyle(fontSize: 14, fontWeight: FontWeight.w600),
),
inputDecorationTheme: InputDecorationTheme(
border: OutlineInputBorder(borderRadius: BorderRadius.circular(12)),
filled: true,
fillColor: AppColors.surface,
contentPadding: const EdgeInsets.symmetric(horizontal: 16, vertical: 14),
),
dividerTheme: const DividerThemeData(color: AppColors.divider, thickness: 1),
);
}