import 'package:comunic/ui/screens/conversations_screen.dart'; import 'package:comunic/ui/screens/menus_screen.dart'; import 'package:comunic/ui/tiles/custom_bottom_navigation_bar_item.dart'; import 'package:flutter/material.dart'; /// Main route of the application /// /// @author Pierre HUBERT class HomeRoute extends StatefulWidget { @override State createState() => _HomeRouteState(); } class _HomeRouteState extends State { int _currTab = 0; List history = List(); /// Change currently visible tab void _changeTab(int newTabNumber) { setState(() { _currTab = newTabNumber; }); } /// Allows to go to previous tab Future _willPop() async { if (history.length == 1) return true; history.removeLast(); _changeTab(history[history.length - 1]); return false; } /// Handles a new tab being tapped void _onTap(int number, BuildContext context) { if (_currTab != number) history.add(number); _changeTab(number); } @override void initState() { super.initState(); history.add(_currTab); } /// Build the body of the application Widget _buildBody(BuildContext context) { switch (_currTab) { case 0: return ConversationsScreen(); case 1: return MenuScreen(); default: throw "Invalid tab number : " + _currTab.toString(); } } /// Build navigation bar items List _buildNavigationBarItems() { return [ CustomNavigationBarItem( icon: Icon(Icons.chat), title: Text("Conversations"), ), CustomNavigationBarItem( icon: Icon(Icons.menu), title: Text("Menu"), ), ]; } @override Widget build(BuildContext context) { return WillPopScope( onWillPop: _willPop, child: Scaffold( body: SafeArea( child: _buildBody(context), ), bottomNavigationBar: BottomNavigationBar( currentIndex: _currTab, items: _buildNavigationBarItems(), onTap: (i) => _onTap(i, context), ), ), ); } }