From f257e0898d270889a9d6290496018306d72d161b Mon Sep 17 00:00:00 2001
From: Nishant Srivastava <nisrulz@gmail.com>
Date: Fri, 19 Jan 2018 04:00:59 +0530
Subject: [PATCH] updated: navigation_drawer example with code refactoring

---
 navigation_drawer/lib/main.dart             | 57 ++++--------------
 navigation_drawer/lib/nav_drawer.dart       |  9 +++
 navigation_drawer/lib/screens/account.dart  | 18 ++++++
 navigation_drawer/lib/screens/home.dart     | 64 +++++++++++++++++++++
 navigation_drawer/lib/screens/settings.dart | 18 ++++++
 5 files changed, 120 insertions(+), 46 deletions(-)
 create mode 100644 navigation_drawer/lib/nav_drawer.dart
 create mode 100644 navigation_drawer/lib/screens/account.dart
 create mode 100644 navigation_drawer/lib/screens/home.dart
 create mode 100644 navigation_drawer/lib/screens/settings.dart

diff --git a/navigation_drawer/lib/main.dart b/navigation_drawer/lib/main.dart
index c5b38ab..53303a5 100644
--- a/navigation_drawer/lib/main.dart
+++ b/navigation_drawer/lib/main.dart
@@ -1,50 +1,15 @@
 import 'package:flutter/material.dart';
+import 'package:navigation_drawer/screens/account.dart';
+import 'package:navigation_drawer/screens/home.dart';
+import 'package:navigation_drawer/screens/settings.dart';
 
 void main() {
-  runApp(new MaterialApp(home: new MyDrawerApp()));
-}
-
-class MyDrawerApp extends StatelessWidget {
-  @override
-  Widget build(BuildContext context) {
-    var headerChild = new DrawerHeader(child: new Text("Header"));
-    var aboutChild = new AboutListTile(
-        child: new Text("About"),
-        applicationName: "Application Name",
-        applicationVersion: "v1.0.0",
-        applicationIcon: new Icon(Icons.adb),
-        icon: new Icon(Icons.info));
-
-    var myNavChildren = [
-      headerChild,
-      getNavItem(Icons.settings, "Settings"),
-      getNavItem(Icons.call, "Call"),
-      getNavItem(Icons.home, "Home"),
-      getNavItem(Icons.account_box, "Account"),
-      aboutChild
-    ];
-
-    ListView listView = new ListView(children: myNavChildren);
-    Drawer myDrawer = new Drawer(
-      child: listView,
-    );
-
-    return new Scaffold(
-      appBar: new AppBar(
-        title: new Text("Navigation Drawer Example"),
-      ),
-      body: new Container(
-          child: new Center(
-        child: new Text("Hello World!"),
-      )),
-      drawer: myDrawer,
-    );
-  }
-
-  ListTile getNavItem(var icon, String s) {
-    return new ListTile(
-      leading: new Icon(icon),
-      title: new Text(s),
-    );
-  }
+  runApp(new MaterialApp(
+    home: new HomeScreen(), // route for home is '/' implicitly
+    routes: <String, WidgetBuilder>{
+      // define the routes
+      SettingsScreen.routeName: (BuildContext context) => new SettingsScreen(),
+      AccountScreen.routeName: (BuildContext context) => new AccountScreen(),
+    },
+  ));
 }
diff --git a/navigation_drawer/lib/nav_drawer.dart b/navigation_drawer/lib/nav_drawer.dart
new file mode 100644
index 0000000..6cdd800
--- /dev/null
+++ b/navigation_drawer/lib/nav_drawer.dart
@@ -0,0 +1,9 @@
+import 'package:flutter/material.dart';
+import 'package:navigation_drawer/screens/account.dart';
+import 'package:navigation_drawer/screens/home.dart';
+import 'package:navigation_drawer/screens/settings.dart';
+
+class NavDrawer {
+
+
+}
diff --git a/navigation_drawer/lib/screens/account.dart b/navigation_drawer/lib/screens/account.dart
new file mode 100644
index 0000000..06eaffb
--- /dev/null
+++ b/navigation_drawer/lib/screens/account.dart
@@ -0,0 +1,18 @@
+import 'package:flutter/material.dart';
+
+class AccountScreen extends StatelessWidget {
+  static String routeName = "/account";
+
+  @override
+  Widget build(BuildContext context) {
+    return new Scaffold(
+      appBar: new AppBar(
+        title: new Text("Account"),
+      ),
+      body: new Container(
+          child: new Center(
+        child: new Text("Account Screen"),
+      )),
+    );
+  }
+}
diff --git a/navigation_drawer/lib/screens/home.dart b/navigation_drawer/lib/screens/home.dart
new file mode 100644
index 0000000..2b24ab5
--- /dev/null
+++ b/navigation_drawer/lib/screens/home.dart
@@ -0,0 +1,64 @@
+import 'package:flutter/material.dart';
+import 'package:navigation_drawer/screens/account.dart';
+import 'package:navigation_drawer/screens/settings.dart';
+
+class HomeScreen extends StatefulWidget {
+  @override
+  HomeScreenState createState() => new HomeScreenState();
+}
+
+class HomeScreenState extends State<HomeScreen> {
+  Drawer getNavDrawer(BuildContext context) {
+    var headerChild = new DrawerHeader(child: new Text("Header"));
+    var aboutChild = new AboutListTile(
+        child: new Text("About"),
+        applicationName: "Application Name",
+        applicationVersion: "v1.0.0",
+        applicationIcon: new Icon(Icons.adb),
+        icon: new Icon(Icons.info));
+
+    ListTile getNavItem(var icon, String s, String routeName) {
+      return new ListTile(
+        leading: new Icon(icon),
+        title: new Text(s),
+        onTap: () {
+          setState(() {
+            // pop closes the drawer
+            Navigator.of(context).pop();
+            // navigate to the route
+            Navigator.of(context).pushNamed(routeName);
+          });
+        },
+      );
+    }
+
+    var myNavChildren = [
+      headerChild,
+      getNavItem(Icons.settings, "Settings", SettingsScreen.routeName),
+      getNavItem(Icons.home, "Home", "/"),
+      getNavItem(Icons.account_box, "Account", AccountScreen.routeName),
+      aboutChild
+    ];
+
+    ListView listView = new ListView(children: myNavChildren);
+
+    return new Drawer(
+      child: listView,
+    );
+  }
+
+  @override
+  Widget build(BuildContext context) {
+    return new Scaffold(
+      appBar: new AppBar(
+        title: new Text("Navigation Drawer Example"),
+      ),
+      body: new Container(
+          child: new Center(
+        child: new Text("Home Screen"),
+      )),
+      // Set the nav drawer
+      drawer: getNavDrawer(context),
+    );
+  }
+}
diff --git a/navigation_drawer/lib/screens/settings.dart b/navigation_drawer/lib/screens/settings.dart
new file mode 100644
index 0000000..b986e2b
--- /dev/null
+++ b/navigation_drawer/lib/screens/settings.dart
@@ -0,0 +1,18 @@
+import 'package:flutter/material.dart';
+
+class SettingsScreen extends StatelessWidget {
+  static String routeName = "/settings";
+
+  @override
+  Widget build(BuildContext context) {
+    return new Scaffold(
+      appBar: new AppBar(
+        title: new Text("Settings"),
+      ),
+      body: new Container(
+          child: new Center(
+        child: new Text("Settings Screen"),
+      )),
+    );
+  }
+}