- 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)
89 lines
3.8 KiB
Dart
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),
|
|
);
|
|
}
|