import 'package:flutter/material.dart'; class NavigationProvider extends ChangeNotifier { int _currentIndex = 0; final List _navigationHistory = [0]; String _currentRoute = '/'; String _currentTitle = 'home'; int get currentIndex => _currentIndex; List get navigationHistory => List.unmodifiable(_navigationHistory); String get currentRoute => _currentRoute; String get currentTitle => _currentTitle; static const Map routeToIndex = { '/': 0, '/add-subscription': -1, '/sms-scanner': 3, '/analysis': 1, '/settings': 4, '/subscription-detail': -1, }; static const Map indexToRoute = { 0: '/', 1: '/analysis', 3: '/sms-scanner', 4: '/settings', }; static const Map indexToTitle = { 0: 'home', 1: 'analysis', 3: 'smsScanLabel', 4: 'settings', }; void updateCurrentIndex(int index, {bool addToHistory = true}) { if (_currentIndex == index) return; _currentIndex = index; _currentRoute = indexToRoute[index] ?? '/'; _currentTitle = indexToTitle[index] ?? 'home'; if (addToHistory && index >= 0) { _navigationHistory.add(index); if (_navigationHistory.length > 10) { _navigationHistory.removeAt(0); } } notifyListeners(); } void updateByRoute(String route) { final index = routeToIndex[route] ?? 0; _currentRoute = route; if (index >= 0) { _currentIndex = index; _currentTitle = indexToTitle[index] ?? 'home'; } else { switch (route) { case '/add-subscription': _currentTitle = 'addSubscription'; break; case '/subscription-detail': _currentTitle = 'subscriptionDetail'; break; default: _currentTitle = 'home'; } } notifyListeners(); } bool canPop() { return _navigationHistory.length > 1; } void pop() { if (_navigationHistory.length > 1) { _navigationHistory.removeLast(); final previousIndex = _navigationHistory.last; updateCurrentIndex(previousIndex, addToHistory: false); } } void reset() { _currentIndex = 0; _currentRoute = '/'; _currentTitle = 'home'; _navigationHistory.clear(); _navigationHistory.add(0); notifyListeners(); } void clearHistoryAndGoHome() { _currentIndex = 0; _currentRoute = '/'; _currentTitle = 'home'; _navigationHistory.clear(); _navigationHistory.add(0); notifyListeners(); } }