163 lines
5.2 KiB
Dart
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',
|
|
),
|
|
],
|
|
);
|
|
},
|
|
),
|
|
);
|
|
}
|
|
}
|
|
|