import 'package:auto_route/auto_route.dart'; import 'package:flutter/material.dart'; import 'package:flutter_remix/flutter_remix.dart'; import 'package:furman_now/src/routes/index.gr.dart'; import 'package:salomon_bottom_bar/salomon_bottom_bar.dart'; class MainLayout extends StatefulWidget { const MainLayout({ Key? key, }) : super(key: key); @override State createState() => _MainLayoutState(); } class _MainLayoutState extends State { DateTime oldTime = DateTime.now(); DateTime newTime = DateTime.now(); void showSnackBar() { ScaffoldMessenger.of(context).showSnackBar( const SnackBar( behavior: SnackBarBehavior.floating, duration: Duration(milliseconds: 600), margin: EdgeInsets.only(bottom: 2, right: 2, left: 2), content: Text('Tap back button again to exit'), ), ); } void hideSnackBar() { ScaffoldMessenger.of(context).hideCurrentSnackBar(); } @override Widget build(BuildContext context) { return AutoTabsScaffold( animationDuration: const Duration(milliseconds: 150), routes: const [ HomePageRouter(children: [ HomeRoute(), ]), MapRoute(), EventsRoute(), InfoPageRouter(children: [InfoRoute()]), ], bottomNavigationBuilder: (_, tabsRouter) { return WillPopScope( onWillPop: () async { if (tabsRouter.canNavigateBack) { tabsRouter.navigateBack(); return false; } else { // if can't navigate back then we're probably trying to exit newTime = DateTime.now(); int difference = newTime.difference(oldTime).inMilliseconds; oldTime = newTime; if (difference < 1000) { hideSnackBar(); return true; } else { showSnackBar(); return false; } } }, child: Padding( padding: const EdgeInsets.symmetric(vertical: 3, horizontal: 20), child: SalomonBottomBar( itemPadding: const EdgeInsets.symmetric(vertical: 12, horizontal: 16), items: [ SalomonBottomBarItem( icon: const Icon(FlutterRemix.home_line), title: const Text('Home'), ), SalomonBottomBarItem( icon: const Icon(FlutterRemix.map_2_line), title: const Text('Map'), ), SalomonBottomBarItem( icon: const Icon(FlutterRemix.calendar_line), title: const Text('Events'), ), SalomonBottomBarItem( icon: const Icon(FlutterRemix.information_line), title: const Text('Info'), ), ], currentIndex: tabsRouter.activeIndex, selectedItemColor: Theme.of(context).primaryColor, unselectedItemColor: Colors.grey[600], onTap: (index) { if (tabsRouter.activeIndex == index) { // tabs } else { tabsRouter.setActiveIndex(index); } }, ), ), ); }, ); } }