import 'package:auto_route/auto_route.dart'; import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:furman_now/src/routes/index.gr.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( routes: const [ HomeRoute(), MapRoute(), StudentIdRoute(), EventsRoute(), 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: BottomNavigationBar( items: const [ BottomNavigationBarItem( icon: Icon(Icons.home), label: 'Home', ), BottomNavigationBarItem( icon: Icon(Icons.map), label: 'Map', ), BottomNavigationBarItem( icon: Icon(Icons.perm_identity), label: 'Meal Card', ), BottomNavigationBarItem( icon: Icon(Icons.calendar_month), label: 'Events', ), BottomNavigationBarItem( icon: Icon(Icons.info_outline), label: 'Info', ), ], currentIndex: tabsRouter.activeIndex, selectedItemColor: Theme.of(context).primaryColor, unselectedItemColor: Colors.grey[600], onTap: tabsRouter.setActiveIndex, ), ); }, ); } }