import 'package:flutter/material.dart'; import 'food_detail_page.dart'; class HomePage extends StatelessWidget { const HomePage({super.key}); @override Widget build(BuildContext context) { return Scaffold( body: CustomScrollView( slivers: [ SliverAppBar( floating: true, title: Row( children: [ Image.asset( 'assets/images/logo.png', height: 40, ), const SizedBox(width: 8), const Text('DiKantin'), ], ), actions: [ IconButton( icon: const Icon(Icons.shopping_cart), onPressed: () { // Navigate to cart }, ), ], ), SliverToBoxAdapter( child: Padding( padding: const EdgeInsets.all(16.0), child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ // Balance Card Container( padding: const EdgeInsets.all(16), decoration: BoxDecoration( color: Colors.blue, borderRadius: BorderRadius.circular(12), ), child: const Row( children: [ Icon( Icons.account_balance_wallet, color: Colors.white, ), SizedBox(width: 12), Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Text( 'Polije Pay', style: TextStyle( color: Colors.white, fontSize: 14, ), ), Text( 'Rp 25.000', style: TextStyle( color: Colors.white, fontSize: 20, fontWeight: FontWeight.bold, ), ), ], ), ], ), ), const SizedBox(height: 24), // Search Bar TextField( decoration: InputDecoration( hintText: 'Mau makan apa hari ini?', prefixIcon: const Icon(Icons.search), border: OutlineInputBorder( borderRadius: BorderRadius.circular(12), borderSide: BorderSide.none, ), filled: true, fillColor: Colors.grey[200], ), ), ], ), ), ), SliverPadding( padding: const EdgeInsets.all(16.0), sliver: SliverGrid( gridDelegate: const SliverGridDelegateWithFixedCrossAxisCount( crossAxisCount: 2, mainAxisSpacing: 16, crossAxisSpacing: 16, childAspectRatio: 0.8, ), delegate: SliverChildBuilderDelegate( (context, index) { return GestureDetector( onTap: () { Navigator.push( context, MaterialPageRoute( builder: (context) => const FoodDetailPage( name: 'Nasi Ayam Geprek', description: 'Nasi + ayam geprek + timun + tahu + tempe + sambal bawang', price: 'Rp 10.000', imageUrl: 'assets/images/nasi_ayam_geprek.jpg', location: 'Kantin 1', ), ), ); }, child: Container( decoration: BoxDecoration( color: Colors.white, borderRadius: BorderRadius.circular(12), boxShadow: [ BoxShadow( color: Colors.black.withOpacity(0.05), blurRadius: 5, offset: const Offset(0, 2), ), ], ), child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ ClipRRect( borderRadius: const BorderRadius.vertical( top: Radius.circular(12), ), child: Image.asset( 'assets/images/nasi_ayam_geprek.jpg', height: 120, width: double.infinity, fit: BoxFit.cover, ), ), Padding( padding: const EdgeInsets.all(12), child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ const Text( 'Nasi Ayam Geprek', style: TextStyle( fontWeight: FontWeight.bold, fontSize: 16, ), ), const SizedBox(height: 4), Text( 'Rp 10.000', style: TextStyle( color: Colors.blue[700], fontWeight: FontWeight.bold, ), ), const SizedBox(height: 4), Text( 'Kantin 1', style: TextStyle( color: Colors.grey[600], fontSize: 12, ), ), ], ), ), ], ), ), ); }, childCount: 10, // Example count ), ), ), ], ), bottomNavigationBar: BottomNavigationBar( type: BottomNavigationBarType.fixed, currentIndex: 0, items: const [ BottomNavigationBarItem( icon: Icon(Icons.home), label: 'Beranda', ), BottomNavigationBarItem( icon: Icon(Icons.assignment), label: 'Aktivitas', ), BottomNavigationBarItem( icon: Icon(Icons.chat), label: 'Chat', ), BottomNavigationBarItem( icon: Icon(Icons.person), label: 'Profil', ), ], selectedItemColor: Colors.blue, unselectedItemColor: Colors.grey, ), ); } }