import 'package:flutter/material.dart'; import 'package:intl/intl.dart'; import '../theme/app_theme.dart'; import '../models/history_repository.dart'; class StatsPage extends StatelessWidget { const StatsPage({super.key}); @override Widget build(BuildContext context) { final history = HistoryRepository.sessions; return Scaffold( backgroundColor: AppTheme.bgLight, appBar: AppBar( backgroundColor: Colors.transparent, elevation: 0, leading: const BackButton(color: AppTheme.primary), title: const Text( "Insights", style: TextStyle( color: AppTheme.primary, fontWeight: FontWeight.w800, ), ), ), body: SingleChildScrollView( child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Padding( padding: const EdgeInsets.all(24), child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Container( padding: const EdgeInsets.all(24), decoration: BoxDecoration( gradient: const LinearGradient( colors: [AppTheme.primary, Color(0xFF454955)], ), borderRadius: BorderRadius.circular(24), boxShadow: [ BoxShadow( color: AppTheme.primary.withOpacity(0.3), blurRadius: 15, offset: const Offset(0, 8), ) ], ), child: Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Row( children: [ const Text( "Total Focus", style: TextStyle( color: Colors.white70, fontSize: 13, fontWeight: FontWeight.w600, ), ), const SizedBox(width: 12), Container( padding: const EdgeInsets.symmetric( horizontal: 8, vertical: 2, ), decoration: BoxDecoration( color: Colors.orangeAccent.withOpacity(0.2), borderRadius: BorderRadius.circular(4), ), child: Row( children: [ const Icon( Icons.local_fire_department, size: 14, color: Colors.orangeAccent, ), const SizedBox(width: 4), Text( "${HistoryRepository.currentStreak} Day Streak", style: const TextStyle( color: Colors.orangeAccent, fontSize: 10, fontWeight: FontWeight.bold, ), ), ], ), ) ], ), const SizedBox(height: 4), Text( "${history.fold(0, (sum, e) => sum + e.durationMinutes)}m", style: const TextStyle( color: Colors.white, fontSize: 36, fontWeight: FontWeight.w900, ), ), ], ), Container( padding: const EdgeInsets.all(12), decoration: BoxDecoration( color: Colors.white.withOpacity(0.1), shape: BoxShape.circle, ), child: const Icon( Icons.emoji_events_outlined, color: Colors.white, size: 30, ), ) ], ), ), const SizedBox(height: 30), const Text( "Session History", style: TextStyle( fontSize: 20, fontWeight: FontWeight.w800, color: AppTheme.textMain, ), ), ], ), ), ListView.separated( physics: const NeverScrollableScrollPhysics(), shrinkWrap: true, padding: const EdgeInsets.fromLTRB(24, 0, 24, 40), itemCount: history.length, separatorBuilder: (_, __) => const SizedBox(height: 16), itemBuilder: (context, index) { final session = history[index]; return Container( padding: const EdgeInsets.all(16), decoration: BoxDecoration( color: Colors.white, borderRadius: BorderRadius.circular(16), boxShadow: AppTheme.innerShadow, ), child: Row( children: [ Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Text( DateFormat('MM/dd HH:mm').format(session.startTime), style: const TextStyle( fontSize: 13, color: AppTheme.textSub, fontWeight: FontWeight.w600, ), ), const SizedBox(height: 4), Text( "${session.durationMinutes} min", style: const TextStyle( fontSize: 17, fontWeight: FontWeight.w900, color: AppTheme.textMain, ), ), ], ), const SizedBox(width: 16), Expanded( child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Text( session.intent ?? session.tag, style: const TextStyle( fontWeight: FontWeight.w800, fontSize: 16, color: AppTheme.textMain, ), maxLines: 1, overflow: TextOverflow.ellipsis, ), if (session.intent != null) Text( session.tag, style: const TextStyle( fontSize: 13, color: AppTheme.accent, fontWeight: FontWeight.w700, ), ), ], ), ), Row( children: List.generate( session.rating.round(), (i) => const Icon( Icons.star_rounded, size: 16, color: Colors.amber, ), ), ) ], ), ); }, ), ], ), ), ); } }