feat: full onboarding + quiz flow (Flutter from scratch)

- splash → intro → 5-step quiz → result screen
- Plus Jakarta Sans typography, indigo brand system
- animated quiz rows, multi-select concerns, progress bar
- Shaynee mascot reveal on result screen only
- flutter_animate for all transitions
This commit is contained in:
mav
2026-05-28 16:20:18 +02:00
parent 74c712dbae
commit 30cee5a486
12 changed files with 1567 additions and 144 deletions

43
lib/theme.dart Normal file
View File

@@ -0,0 +1,43 @@
import 'package:flutter/material.dart';
import 'package:google_fonts/google_fonts.dart';
class SColors {
static const primary = Color(0xFF5B4FCF);
static const primaryLight = Color(0xFF7B70E0);
static const primaryDeep = Color(0xFF3D32A8);
static const accent = Color(0xFFFF7EB3);
static const accentSoft = Color(0xFFFFF0F6);
static const bgPage = Color(0xFFFAF9FF);
static const surface = Color(0xFFFFFFFF);
static const textPrimary = Color(0xFF1C1A2E);
static const textSecondary = Color(0xFF7B7A8E);
static const border = Color(0xFFE8E6F0);
static const skyTint = Color(0xFFEEECFA);
static const gradientTop = Color(0xFF5B4FCF);
static const gradientBot = Color(0xFF8B5CF6);
}
ThemeData buildTheme() {
return ThemeData(
colorScheme: ColorScheme.fromSeed(
seedColor: SColors.primary,
brightness: Brightness.light,
),
scaffoldBackgroundColor: SColors.bgPage,
textTheme: GoogleFonts.plusJakartaSansTextTheme().copyWith(
displayLarge: GoogleFonts.plusJakartaSans(
fontSize: 32, fontWeight: FontWeight.w800, color: SColors.textPrimary,
),
headlineMedium: GoogleFonts.plusJakartaSans(
fontSize: 24, fontWeight: FontWeight.w700, color: SColors.textPrimary,
),
bodyLarge: GoogleFonts.plusJakartaSans(
fontSize: 16, fontWeight: FontWeight.w400, color: SColors.textPrimary,
),
bodyMedium: GoogleFonts.plusJakartaSans(
fontSize: 14, fontWeight: FontWeight.w400, color: SColors.textSecondary,
),
),
useMaterial3: true,
);
}