import 'package:easy_localization/easy_localization.dart'; import 'package:flutter/material.dart'; import 'package:go_router/go_router.dart'; import 'package:provider/provider.dart'; import 'package:surface/providers/navigation.dart'; class AppBottomNavigationBar extends StatefulWidget { const AppBottomNavigationBar({super.key}); @override State createState() => _AppBottomNavigationBarState(); } class _AppBottomNavigationBarState extends State { @override void initState() { super.initState(); WidgetsBinding.instance.addPostFrameCallback((_) { context .read() .autoDetectIndex(GoRouter.maybeOf(context)); }); } @override Widget build(BuildContext context) { final nav = context.watch(); return ListenableBuilder( listenable: nav, builder: (context, _) { if (!nav.isIndexInRange(0, nav.pinnedDestinationCount)) { return const SizedBox.shrink(); } final destinations = [ ...nav.destinations.where((ele) => ele.isPinned), ]; return BottomNavigationBar( currentIndex: nav.getIndexInRange(0, nav.pinnedDestinationCount), type: BottomNavigationBarType.fixed, showUnselectedLabels: false, items: destinations.map((ele) { return BottomNavigationBarItem( icon: ele.icon, label: ele.label.tr(), ); }).toList(), onTap: (idx) { nav.setIndex(idx); GoRouter.of(context).goNamed(destinations[idx].screen); }, ); }, ); } }