import 'package:flutter/material.dart'; import 'package:shared_preferences/shared_preferences.dart'; import '../main.dart'; import '../widgets/feature_grid.dart'; import 'features/profile_screen.dart'; import 'splash_screen.dart'; // ✅ Tambahkan ini class HomeScreen extends StatefulWidget { final String token; final Map user; const HomeScreen({super.key, required this.token, required this.user}); @override State createState() => _HomeScreenState(); } class _HomeScreenState extends State { void logout() async { final prefs = await SharedPreferences.getInstance(); await prefs.remove('token'); await prefs.remove('user'); if (!mounted) return; // ✅ Hindari error context async Navigator.pushAndRemoveUntil( context, MaterialPageRoute( builder: (_) => SplashScreen( onLoginSuccess: (token, user) { Navigator.pushReplacement( navigatorKey.currentContext!, MaterialPageRoute( builder: (_) => HomeScreen(token: token, user: user), ), ); }, ), ), (route) => false, ); } Widget buildBanner(String name) { return Container( margin: const EdgeInsets.symmetric(horizontal: 16), padding: const EdgeInsets.all(16), decoration: BoxDecoration( borderRadius: BorderRadius.circular(20), gradient: const LinearGradient( colors: [Color(0xFFA5D6A7), Color(0xFF66BB6A)], begin: Alignment.topLeft, end: Alignment.bottomRight, ), ), child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ const Text( 'Monas SMA Bina Insan Mandiri', style: TextStyle(color: Colors.white70, fontSize: 12), ), const SizedBox(height: 4), Text( 'Selamat Datang, $name', style: const TextStyle( color: Colors.white, fontSize: 20, fontWeight: FontWeight.bold, ), ), ], ), ); } @override Widget build(BuildContext context) { final name = widget.user['name'] ?? 'Santri'; return Scaffold( drawer: Drawer( child: ListView( padding: EdgeInsets.zero, children: [ DrawerHeader( decoration: const BoxDecoration(color: Color(0xFF43A047)), child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ const Icon( Icons.account_circle, size: 64, color: Colors.white, ), const SizedBox(height: 8), Text( name, style: const TextStyle(color: Colors.white, fontSize: 18), ), const Text('Santri', style: TextStyle(color: Colors.white70)), ], ), ), ListTile( leading: const Icon(Icons.person), title: const Text('Profil'), onTap: () { Navigator.pop(context); Navigator.push( context, MaterialPageRoute( builder: (_) => ProfileScreen(token: widget.token), ), ); }, ), ListTile( leading: const Icon(Icons.logout), title: const Text('Logout'), onTap: () { Navigator.pop(context); logout(); }, ), ], ), ), appBar: AppBar(backgroundColor: const Color(0xFF43A047), elevation: 0), body: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ const SizedBox(height: 12), buildBanner(name), const SizedBox(height: 20), Expanded( child: Padding( padding: const EdgeInsets.symmetric(horizontal: 16), child: FeatureGrid(token: widget.token), ), ), ], ), ); } }