MIF_E31222596/website/lib/screens/home_screen.dart

149 lines
4.2 KiB
Dart

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<String, dynamic> user;
const HomeScreen({super.key, required this.token, required this.user});
@override
State<HomeScreen> createState() => _HomeScreenState();
}
class _HomeScreenState extends State<HomeScreen> {
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),
),
),
],
),
);
}
}