import 'package:flutter/material.dart'; import 'collections_screen.dart'; import 'scan_tab.dart'; import 'profile_screen.dart'; /// Bottom-navigation shell that hosts the three main tabs. class HomeShell extends StatefulWidget { const HomeShell({super.key}); @override State createState() => _HomeShellState(); } class _HomeShellState extends State { int _currentIndex = 0; final _collectionsKey = GlobalKey(); final _scanKey = GlobalKey(); late final PageController _pageController; late final List _pages = [ CollectionsScreen(key: _collectionsKey), ScanTab(key: _scanKey), const ProfileScreen(), ]; @override void initState() { super.initState(); _pageController = PageController(initialPage: _currentIndex); } @override void dispose() { _pageController.dispose(); super.dispose(); } void _onTabSelected(int i) { if (_currentIndex == i) return; setState(() => _currentIndex = i); _pageController.animateToPage( i, duration: const Duration(milliseconds: 260), curve: Curves.easeOutCubic, ); if (i == 0) { _collectionsKey.currentState?.refreshIfStale(); } } @override Widget build(BuildContext context) { return Scaffold( body: PageView( controller: _pageController, onPageChanged: (index) { if (_currentIndex != index) { setState(() => _currentIndex = index); } if (index == 0) { _collectionsKey.currentState?.refreshIfStale(); } }, children: _pages, ), bottomNavigationBar: NavigationBar( selectedIndex: _currentIndex, onDestinationSelected: _onTabSelected, destinations: const [ NavigationDestination( icon: Icon(Icons.collections_bookmark_outlined), selectedIcon: Icon(Icons.collections_bookmark), label: 'Collections', ), NavigationDestination( icon: Icon(Icons.qr_code_scanner_outlined), selectedIcon: Icon(Icons.qr_code_scanner), label: 'Scan', ), NavigationDestination( icon: Icon(Icons.person_outline), selectedIcon: Icon(Icons.person), label: 'Profile', ), ], ), ); } }