MIF_E31222653/aplikasi/lib/presentation/screens/features/home_page.dart

214 lines
7.7 KiB
Dart

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,
),
);
}
}