// ignore_for_file: deprecated_member_use import 'package:flutter/material.dart'; import 'package:go_router/go_router.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; import '../../../core/widgets/app_scaffold.dart'; import '../../../core/widgets/primary_button.dart'; import '../application/onboarding_controller.dart'; class OnboardingIntroScreen extends ConsumerWidget { const OnboardingIntroScreen({super.key}); @override Widget build(BuildContext context, WidgetRef ref) { final controller = ref.watch(onboardingControllerProvider.notifier); return AppScaffold( body: SafeArea( child: Padding( padding: const EdgeInsets.only(top: 30.0, left: 24.0, right: 24.0, bottom: 30.0), child: Column( crossAxisAlignment: CrossAxisAlignment.stretch, children: [ // Progress Bar and Navigation _OnboardingProgress(currentStep: 1, totalSteps: 3), const SizedBox(height: 48), const Icon( Icons.timer_outlined, size: 100, color: null, ), const SizedBox(height: 32), Text( 'Welcome to 1356', style: Theme.of(context).textTheme.headlineLarge?.copyWith( fontWeight: FontWeight.bold, ), textAlign: TextAlign.center, ), const SizedBox(height: 16), Text( 'Your 1356-day journey starts here.\nCreate your bucket list and begin your countdown.', style: Theme.of(context).textTheme.bodyLarge?.copyWith( color: Theme.of(context).colorScheme.onSurface.withOpacity(0.8), height: 1.5, ), textAlign: TextAlign.center, ), const SizedBox(height: 48), const _FeatureCard( icon: Icons.flag, title: 'Set Your Goals', description: 'Create a bucket list of 1-20 meaningful goals', ), const SizedBox(height: 16), const _FeatureCard( icon: Icons.lock_clock, title: 'Fixed Timeline', description: '1356 days to achieve everything - no extensions', ), const SizedBox(height: 16), const _FeatureCard( icon: Icons.trending_up, title: 'Track Progress', description: 'Watch yourself grow day by day', ), const Spacer(), Row( children: [ Expanded( child: TextButton( onPressed: () async { await controller.skipOnboarding(); if (context.mounted) { context.push('/home'); } }, child: const Text('Skip'), ), ), const SizedBox(width: 16), Expanded( flex: 2, child: PrimaryButton( onPressed: () { controller.completeStep('intro'); context.push('/onboarding/how-it-works'); }, text: 'Get Started', ), ), ], ), const SizedBox(height: 16), ], ), ), ), ); } } class _FeatureCard extends StatelessWidget { final IconData icon; final String title; final String description; const _FeatureCard({ required this.icon, required this.title, required this.description, }); @override Widget build(BuildContext context) { return Container( padding: const EdgeInsets.all(16), decoration: BoxDecoration( color: Theme.of(context).colorScheme.primaryContainer.withOpacity(0.3), borderRadius: BorderRadius.circular(12), border: Border.all( color: Theme.of(context).colorScheme.primary.withOpacity(0.2), ), ), child: Row( children: [ Icon( icon, color: Theme.of(context).colorScheme.primary, size: 32, ), const SizedBox(width: 16), Expanded( child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Text( title, style: Theme.of(context).textTheme.titleMedium?.copyWith( fontWeight: FontWeight.bold, ), ), const SizedBox(height: 4), Text( description, style: Theme.of(context).textTheme.bodyMedium?.copyWith( color: Theme.of(context).colorScheme.onSurface.withOpacity(0.7), ), ), ], ), ), ], ), ); } } class _OnboardingProgress extends StatelessWidget { final int currentStep; final int totalSteps; const _OnboardingProgress({ required this.currentStep, required this.totalSteps, }); @override Widget build(BuildContext context) { return Column( children: [ Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ Text( 'Step $currentStep of $totalSteps', style: Theme.of(context).textTheme.bodySmall?.copyWith( color: Theme.of(context).colorScheme.onSurface.withOpacity(0.6), ), ), TextButton( onPressed: () => context.pop(), child: const Text('Back'), ), ], ), const SizedBox(height: 12), LinearProgressIndicator( value: currentStep / totalSteps, backgroundColor: Theme.of(context).colorScheme.primaryContainer.withOpacity(0.3), valueColor: AlwaysStoppedAnimation( Theme.of(context).colorScheme.primary, ), ), ], ); } }