mirror of
https://github.com/nisrulz/flutter-examples.git
synced 2025-06-19 23:02:56 +08:00
updated: navigation_drawer example with code refactoring
This commit is contained in:
@ -1,50 +1,15 @@
|
|||||||
import 'package:flutter/material.dart';
|
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() {
|
void main() {
|
||||||
runApp(new MaterialApp(home: new MyDrawerApp()));
|
runApp(new MaterialApp(
|
||||||
}
|
home: new HomeScreen(), // route for home is '/' implicitly
|
||||||
|
routes: <String, WidgetBuilder>{
|
||||||
class MyDrawerApp extends StatelessWidget {
|
// define the routes
|
||||||
@override
|
SettingsScreen.routeName: (BuildContext context) => new SettingsScreen(),
|
||||||
Widget build(BuildContext context) {
|
AccountScreen.routeName: (BuildContext context) => new AccountScreen(),
|
||||||
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),
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
9
navigation_drawer/lib/nav_drawer.dart
Normal file
9
navigation_drawer/lib/nav_drawer.dart
Normal 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 {
|
||||||
|
|
||||||
|
|
||||||
|
}
|
18
navigation_drawer/lib/screens/account.dart
Normal file
18
navigation_drawer/lib/screens/account.dart
Normal 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"),
|
||||||
|
)),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
64
navigation_drawer/lib/screens/home.dart
Normal file
64
navigation_drawer/lib/screens/home.dart
Normal 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),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
18
navigation_drawer/lib/screens/settings.dart
Normal file
18
navigation_drawer/lib/screens/settings.dart
Normal 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"),
|
||||||
|
)),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
Reference in New Issue
Block a user