mirror of
				https://gitlab.com/comunic/comunicmobile
				synced 2025-11-04 04:04:18 +00:00 
			
		
		
		
	Added bottom navigation to home route
This commit is contained in:
		@@ -1,12 +1,90 @@
 | 
			
		||||
import 'package:comunic/ui/tiles/CustomBottomNavigationBarItem.dart';
 | 
			
		||||
import 'package:flutter/material.dart';
 | 
			
		||||
 | 
			
		||||
/// Main route of the application
 | 
			
		||||
///
 | 
			
		||||
/// @author Pierre HUBERT
 | 
			
		||||
 | 
			
		||||
class HomeRoute extends StatelessWidget {
 | 
			
		||||
class HomeRoute extends StatefulWidget {
 | 
			
		||||
  @override
 | 
			
		||||
  State<StatefulWidget> createState() => _HomeRouteState();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
class _HomeRouteState extends State<HomeRoute> {
 | 
			
		||||
  int _currTab = 0;
 | 
			
		||||
  List<int> history = List();
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
  /// Change currently visible tab
 | 
			
		||||
  void _changeTab(int newTabNumber) {
 | 
			
		||||
    setState(() {
 | 
			
		||||
      _currTab = newTabNumber;
 | 
			
		||||
    });
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  /// Allows to go to previous tab
 | 
			
		||||
  Future<bool> _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 Text("Conversations");
 | 
			
		||||
 | 
			
		||||
      case 1:
 | 
			
		||||
        return Text("Menu");
 | 
			
		||||
 | 
			
		||||
      default:
 | 
			
		||||
        throw "Invalid tab number : " + _currTab.toString();
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  /// Build navigation bar items
 | 
			
		||||
  List<BottomNavigationBarItem> _buildNavigationBarItems() {
 | 
			
		||||
    return <BottomNavigationBarItem>[
 | 
			
		||||
      CustomNavigationBarItem(
 | 
			
		||||
        icon: Icon(Icons.chat),
 | 
			
		||||
        title: Text("Conversations"),
 | 
			
		||||
      ),
 | 
			
		||||
      CustomNavigationBarItem(
 | 
			
		||||
        icon: Icon(Icons.menu),
 | 
			
		||||
        title: Text("Menu"),
 | 
			
		||||
      ),
 | 
			
		||||
    ];
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  @override
 | 
			
		||||
  Widget build(BuildContext context) {
 | 
			
		||||
    return Text("Home route");
 | 
			
		||||
    return WillPopScope(
 | 
			
		||||
      onWillPop: _willPop,
 | 
			
		||||
      child: Scaffold(
 | 
			
		||||
        body: SafeArea(
 | 
			
		||||
          child: _buildBody(context),
 | 
			
		||||
        ),
 | 
			
		||||
        bottomNavigationBar: BottomNavigationBar(
 | 
			
		||||
          currentIndex: _currTab,
 | 
			
		||||
          items: _buildNavigationBarItems(),
 | 
			
		||||
          onTap: (i) => _onTap(i, context),
 | 
			
		||||
        ),
 | 
			
		||||
      ),
 | 
			
		||||
    );
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										13
									
								
								lib/ui/tiles/CustomBottomNavigationBarItem.dart
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								lib/ui/tiles/CustomBottomNavigationBarItem.dart
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,13 @@
 | 
			
		||||
import 'package:flutter/material.dart';
 | 
			
		||||
 | 
			
		||||
/// Custom navigation bar item
 | 
			
		||||
///
 | 
			
		||||
/// @author Pierre HUBERT
 | 
			
		||||
 | 
			
		||||
class CustomNavigationBarItem extends BottomNavigationBarItem {
 | 
			
		||||
  const CustomNavigationBarItem({
 | 
			
		||||
    @required Widget icon,
 | 
			
		||||
    Widget title,
 | 
			
		||||
    bool selected,
 | 
			
		||||
  }) : super(icon: icon, title: title, backgroundColor: Colors.blue,);
 | 
			
		||||
}
 | 
			
		||||
		Reference in New Issue
	
	Block a user