import 'package:flutter/material.dart'; import 'package:go_router/go_router.dart'; import '../features/dashboard/screen.dart'; import '../features/add_transaction/screen.dart'; import '../features/categories/screen.dart'; import '../features/settings/screen.dart'; import '../shared/models/transaction.dart'; final _shellKey = GlobalKey(); final appRouter = GoRouter( initialLocation: '/dashboard', routes: [ ShellRoute( navigatorKey: _shellKey, builder: (context, state, child) => AppShell(child: child), routes: [ GoRoute( path: '/dashboard', pageBuilder: (context, state) => const NoTransitionPage( child: DashboardScreen(), ), ), GoRoute( path: '/categories', pageBuilder: (context, state) => const NoTransitionPage( child: CategoriesScreen(), ), ), GoRoute( path: '/settings', pageBuilder: (context, state) => const NoTransitionPage( child: SettingsScreen(), ), ), ], ), GoRoute( path: '/add', builder: (context, state) { final transaction = state.extra as Transaction?; return AddTransactionScreen(initial: transaction); }, ), ], ); class AppShell extends StatelessWidget { final Widget child; const AppShell({super.key, required this.child}); int _locationToIndex(BuildContext context) { final location = GoRouterState.of(context).uri.toString(); if (location.startsWith('/categories')) return 1; if (location.startsWith('/settings')) return 2; return 0; } @override Widget build(BuildContext context) { final idx = _locationToIndex(context); return Scaffold( body: child, floatingActionButton: FloatingActionButton( onPressed: () => context.push('/add'), backgroundColor: const Color(0xFF7C6DED), child: const Icon(Icons.add, color: Colors.white), ), floatingActionButtonLocation: FloatingActionButtonLocation.centerDocked, bottomNavigationBar: NavigationBar( selectedIndex: idx, onDestinationSelected: (i) { if (i == 0) context.go('/dashboard'); if (i == 1) context.go('/categories'); if (i == 2) context.go('/settings'); }, destinations: const [ NavigationDestination( icon: Icon(Icons.dashboard_outlined), selectedIcon: Icon(Icons.dashboard_rounded), label: 'Dashboard', ), NavigationDestination( icon: Icon(Icons.pie_chart_outline_rounded), selectedIcon: Icon(Icons.pie_chart_rounded), label: 'Categories', ), NavigationDestination( icon: Icon(Icons.settings_outlined), selectedIcon: Icon(Icons.settings_rounded), label: 'Settings', ), ], ), ); } }