Skip to content

Instantly share code, notes, and snippets.

@GrandSchtroumpf
Created December 13, 2019 08:09
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 GrandSchtroumpf/dd8cfae3151b18a9f59a8e2197f139fd to your computer and use it in GitHub Desktop.
Save GrandSchtroumpf/dd8cfae3151b18a9f59a8e2197f139fd to your computer and use it in GitHub Desktop.
Flutter nav drawer
import 'package:flutter/material.dart';
void main() {
runApp(MaterialApp(
debugShowCheckedModeBanner: false,
home: HomeScreen(), // route for home is '/' implicitly
routes: <String, WidgetBuilder>{
SettingsScreen.routeName: (BuildContext context) => SettingsScreen(),
AccountScreen.routeName: (BuildContext context) => AccountScreen(),
},
));
}
class HomeScreen extends StatefulWidget {
@override
HomeScreenState createState() => HomeScreenState();
}
class HomeScreenState extends State<HomeScreen> {
Drawer getNavDrawer(BuildContext context) {
final header = DrawerHeader(child: Text("Header"));
final about = AboutListTile(
child: Text("About"),
applicationName: "Application Name",
applicationVersion: "v1.0.0",
applicationIcon: Icon(Icons.adb),
icon: Icon(Icons.info));
ListTile getNavItem(var icon, String s, String routeName) {
return ListTile(
leading: Icon(icon),
title: Text(s),
onTap: () {
setState(() {
// pop closes the drawer
Navigator.of(context).pop();
// navigate to the route
Navigator.of(context).pushNamed(routeName);
});
},
);
}
final myNavChildren = [
header,
getNavItem(Icons.settings, "Settings", SettingsScreen.routeName),
getNavItem(Icons.home, "Home", "/"),
getNavItem(Icons.account_box, "Account", AccountScreen.routeName),
about
];
ListView listView = ListView(children: myNavChildren);
return Drawer(
child: listView,
);
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text("Navigation Drawer Example"),
),
body: Container(
child: Center(
child: Text("Home Screen"),
)),
// Set the nav drawer
drawer: getNavDrawer(context),
);
}
}
class AccountScreen extends StatelessWidget {
static const String routeName = "/account";
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text("Account"),
),
body: Container(
child: Center(
child: Text("Account Screen"),
)),
);
}
}
class SettingsScreen extends StatelessWidget {
static const String routeName = "/settings";
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text("Settings"),
),
body: Container(
child: Center(
child: Text("Settings Screen"),
)),
);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment