updated: navigation_drawer example with code refactoring

This commit is contained in:
Nishant Srivastava
2018-01-19 04:00:59 +05:30
parent 698ac566ff
commit f257e0898d
5 changed files with 120 additions and 46 deletions

View File

@ -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(),
},
));
}

View File

@ -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 {
}

View File

@ -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"),
)),
);
}
}

View File

@ -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),
);
}
}

View File

@ -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"),
)),
);
}
}