import 'package:flutter/material.dart'; import '../screens/features/absensi_screen.dart'; import '../screens/features/nilai_screen.dart'; import '../screens/features/kesehatan_screen.dart'; import '../screens/features/prestasi_screen.dart'; import '../screens/features/pelanggaran_screen.dart'; import '../screens/features/berita_screen.dart'; import '../screens/features/alumni_screen.dart'; import '../screens/features/pembayaran_screen.dart'; class FeatureGrid extends StatelessWidget { final String token; const FeatureGrid({super.key, required this.token}); final List<_FeatureItem> _items = const [ _FeatureItem('Absensi', Icons.how_to_reg), _FeatureItem('Nilai', Icons.grade), _FeatureItem('Kesehatan', Icons.local_hospital), _FeatureItem('Prestasi', Icons.emoji_events), _FeatureItem('Pelanggaran', Icons.report), _FeatureItem('Berita', Icons.article), _FeatureItem('Alumni', Icons.people), _FeatureItem('Pembayaran', Icons.attach_money), ]; @override Widget build(BuildContext context) { return GridView.builder( itemCount: _items.length, gridDelegate: const SliverGridDelegateWithFixedCrossAxisCount( crossAxisCount: 4, crossAxisSpacing: 12, mainAxisSpacing: 12, ), itemBuilder: (context, index) { final item = _items[index]; return GestureDetector( onTap: () { Widget? destination; switch (item.label) { case 'Absensi': destination = AbsensiScreen(token: token); break; case 'Nilai': destination = NilaiScreen(token: token); break; case 'Kesehatan': destination = KesehatanScreen(token: token); break; case 'Prestasi': destination = PrestasiScreen(token: token); break; case 'Pelanggaran': destination = PelanggaranScreen(token: token); break; case 'Berita': destination = BeritaScreen(token: token); break; case 'Alumni': destination = AlumniScreen(token: token); break; case 'Pembayaran': destination = PembayaranScreen(token: token); break; } if (destination != null) { Navigator.push( context, MaterialPageRoute(builder: (_) => destination!), ); } }, child: Container( decoration: BoxDecoration( gradient: const LinearGradient( colors: [Color(0xFF43A047), Color(0xFFFFEB3B)], begin: Alignment.topLeft, end: Alignment.bottomRight, ), borderRadius: BorderRadius.circular(16), boxShadow: [ BoxShadow( color: Colors.black.withOpacity(0.08), blurRadius: 8, offset: const Offset(0, 4), ), ], ), child: Column( mainAxisAlignment: MainAxisAlignment.center, children: [ Icon(item.icon, size: 32, color: Colors.white), const SizedBox(height: 8), Text( item.label, style: const TextStyle( fontSize: 12, fontWeight: FontWeight.bold, color: Colors.white, ), textAlign: TextAlign.center, ), ], ), ), ); }, ); } } class _FeatureItem { final String label; final IconData icon; const _FeatureItem(this.label, this.icon); }