Files
app-hyggecraftery/lib/screens/main_navigation_screen.dart
2026-01-03 15:24:36 +01:00

163 lines
5.2 KiB
Dart

import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import '../providers/cart_provider.dart';
import '../providers/user_provider.dart';
import '../services/analytics_service.dart';
import 'home_screen.dart';
import 'categories_screen.dart';
import 'cart_screen.dart';
import 'profile_screen.dart';
import 'login_screen.dart';
class MainNavigationScreen extends StatefulWidget {
const MainNavigationScreen({super.key});
@override
State<MainNavigationScreen> createState() => _MainNavigationScreenState();
}
class _MainNavigationScreenState extends State<MainNavigationScreen> {
int _currentIndex = 0;
final List<Widget> _screens = [
const HomeScreen(),
const CategoriesScreen(),
const CartScreen(),
const ProfileScreen(),
];
@override
void initState() {
super.initState();
// Track initial page view
AnalyticsService.trackPageView('/home');
}
void _onTabTapped(int index) {
setState(() {
_currentIndex = index;
});
// Track page views
switch (index) {
case 0:
AnalyticsService.trackPageView('/home');
break;
case 1:
AnalyticsService.trackPageView('/categories');
break;
case 2:
AnalyticsService.trackPageView('/cart');
break;
case 3:
AnalyticsService.trackPageView('/profile');
break;
}
}
@override
Widget build(BuildContext context) {
return Scaffold(
body: IndexedStack(
index: _currentIndex,
children: _screens,
),
bottomNavigationBar: Consumer2<CartProvider, UserProvider>(
builder: (context, cart, userProvider, child) {
return NavigationBar(
selectedIndex: _currentIndex,
onDestinationSelected: _onTabTapped,
destinations: [
const NavigationDestination(
icon: Icon(Icons.home_outlined),
selectedIcon: Icon(Icons.home),
label: 'Home',
),
const NavigationDestination(
icon: Icon(Icons.category_outlined),
selectedIcon: Icon(Icons.category),
label: 'Kategorien',
),
NavigationDestination(
icon: Stack(
children: [
const Icon(Icons.shopping_cart_outlined),
if (cart.itemCount > 0)
Positioned(
right: 0,
top: 0,
child: Container(
padding: const EdgeInsets.all(4),
decoration: const BoxDecoration(
color: Colors.red,
shape: BoxShape.circle,
),
constraints: const BoxConstraints(
minWidth: 16,
minHeight: 16,
),
child: Text(
'${cart.itemCount}',
style: const TextStyle(
color: Colors.white,
fontSize: 10,
fontWeight: FontWeight.bold,
),
textAlign: TextAlign.center,
),
),
),
],
),
selectedIcon: Stack(
children: [
const Icon(Icons.shopping_cart),
if (cart.itemCount > 0)
Positioned(
right: 0,
top: 0,
child: Container(
padding: const EdgeInsets.all(4),
decoration: const BoxDecoration(
color: Colors.red,
shape: BoxShape.circle,
),
constraints: const BoxConstraints(
minWidth: 16,
minHeight: 16,
),
child: Text(
'${cart.itemCount}',
style: const TextStyle(
color: Colors.white,
fontSize: 10,
fontWeight: FontWeight.bold,
),
textAlign: TextAlign.center,
),
),
),
],
),
label: 'Warenkorb',
),
NavigationDestination(
icon: Icon(
userProvider.isLoggedIn
? Icons.account_circle_outlined
: Icons.login_outlined,
),
selectedIcon: Icon(
userProvider.isLoggedIn ? Icons.account_circle : Icons.login,
),
label: userProvider.isLoggedIn ? 'Profil' : 'Anmelden',
),
],
);
},
),
);
}
}