Skip to content

Instantly share code, notes, and snippets.

@kashifmin
Last active April 21, 2020 07:20
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save kashifmin/12937f801b5f98466722748555a45bea to your computer and use it in GitHub Desktop.
Save kashifmin/12937f801b5f98466722748555a45bea to your computer and use it in GitHub Desktop.
NavigationDrawer flutter home_page.dart
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),
);
}
}
@sumeetk92
Copy link

sumeetk92 commented May 12, 2018

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.

  1. how back press will work means how to override back button?
  2. I want to go previous fragment from where i came.

@vikskod
Copy link

vikskod commented Apr 21, 2020

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