Last active
April 21, 2020 07:20
-
-
Save kashifmin/12937f801b5f98466722748555a45bea to your computer and use it in GitHub Desktop.
NavigationDrawer flutter home_page.dart
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import 'package:drawer_demo/fragments/first_fragment.dart'; | |
import 'package:drawer_demo/fragments/second_fragment.dart'; | |
import 'package:drawer_demo/fragments/third_fragment.dart'; | |
import 'package:flutter/material.dart'; | |
class DrawerItem { | |
String title; | |
IconData icon; | |
DrawerItem(this.title, this.icon); | |
} | |
class HomePage extends StatefulWidget { | |
final drawerItems = [ | |
new DrawerItem("Fragment 1", Icons.rss_feed), | |
new DrawerItem("Fragment 2", Icons.local_pizza), | |
new DrawerItem("Fragment 3", Icons.info) | |
]; | |
@override | |
State<StatefulWidget> createState() { | |
return new HomePageState(); | |
} | |
} | |
class HomePageState extends State<HomePage> { | |
int _selectedDrawerIndex = 0; | |
_getDrawerItemWidget(int pos) { | |
switch (pos) { | |
case 0: | |
return new FirstFragment(); | |
case 1: | |
return new SecondFragment(); | |
case 2: | |
return new ThirdFragment(); | |
default: | |
return new Text("Error"); | |
} | |
} | |
_onSelectItem(int index) { | |
setState(() => _selectedDrawerIndex = index); | |
Navigator.of(context).pop(); // close the drawer | |
} | |
@override | |
Widget build(BuildContext context) { | |
var drawerOptions = <Widget>[]; | |
for (var i = 0; i < widget.drawerItems.length; i++) { | |
var d = widget.drawerItems[i]; | |
drawerOptions.add( | |
new ListTile( | |
leading: new Icon(d.icon), | |
title: new Text(d.title), | |
selected: i == _selectedDrawerIndex, | |
onTap: () => _onSelectItem(i), | |
) | |
); | |
} | |
return new Scaffold( | |
appBar: new AppBar( | |
// here we display the title corresponding to the fragment | |
// you can instead choose to have a static title | |
title: new Text(widget.drawerItems[_selectedDrawerIndex].title), | |
), | |
drawer: new Drawer( | |
child: new Column( | |
children: <Widget>[ | |
new UserAccountsDrawerHeader( | |
accountName: new Text("John Doe"), accountEmail: null), | |
new Column(children: drawerOptions) | |
], | |
), | |
), | |
body: _getDrawerItemWidget(_selectedDrawerIndex), | |
); | |
} | |
} |
Did somebody get the solution of this problem?
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
How can manage the Back stack of fragments. Suppose One Fragment is open, then from navigation drawer open Second Fragment and then open Third Fragment.