Skip to content

Commit 627097c

Browse files
Navigator的封装,让使用更方便。
Navigator的封装,让使用更方便。
1 parent b309aa3 commit 627097c

File tree

2 files changed

+176
-0
lines changed

2 files changed

+176
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
import 'dart:collection';
2+
3+
import 'package:flutter/material.dart';
4+
5+
6+
7+
class RouteManager{
8+
9+
BuildContext context;
10+
11+
// 管理路由的map
12+
Map<String, WidgetBuilder> routeManagerMap = {};
13+
14+
Map<String, Widget> routeMap = {};
15+
16+
// 构造函数
17+
RouteManager(this.context);
18+
19+
void pushNamed(String routeName){
20+
Navigator.of(context).pushNamed(routeName);
21+
}
22+
23+
// key是 发送路由的标记 Value是要跳转的页面
24+
putRoutesMap(Map<String, Widget> map){
25+
routeMap = map;
26+
}
27+
28+
_putRoutes(){
29+
routeMap.forEach((routeName, targetPage){
30+
routeManagerMap[routeName] = (BuildContext context) => targetPage;
31+
});
32+
}
33+
34+
35+
Map<String, WidgetBuilder> getRoutes(){
36+
return routeManagerMap;
37+
}
38+
39+
40+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,136 @@
1+
import 'package:flutter/material.dart';
2+
import 'navigator_util.dart';
3+
4+
void main() => runApp(MyApp());
5+
6+
7+
8+
9+
RouteManager manager;
10+
void data(BuildContext context){
11+
manager = new RouteManager(context);
12+
13+
Map<String,Widget> routes = {
14+
'/data2':Page2(),
15+
'/data3':Page3(),
16+
'/data4':Page4(),
17+
};
18+
manager.putRoutesMap(routes);
19+
}
20+
21+
22+
RouteManager getData(){
23+
return manager;
24+
}
25+
26+
27+
class MyApp extends StatelessWidget {
28+
29+
30+
@override
31+
Widget build(BuildContext context) {
32+
33+
data(context);
34+
35+
return MaterialApp(
36+
title: 'Flutter Demo',
37+
theme: ThemeData(
38+
primarySwatch: Colors.blue,
39+
),
40+
home: MyHomePage(title: 'Flutter Demo Home Page'),
41+
// 让路由管理更方便一些
42+
routes: getData().getRoutes(),
43+
);
44+
}
45+
}
46+
47+
class MyHomePage extends StatefulWidget {
48+
MyHomePage({Key key, this.title}) : super(key: key);
49+
50+
final String title;
51+
52+
@override
53+
_MyHomePageState createState() => _MyHomePageState();
54+
}
55+
56+
class _MyHomePageState extends State<MyHomePage> {
57+
58+
@override
59+
Widget build(BuildContext context) {
60+
return Scaffold(
61+
appBar: AppBar(
62+
title: Text(widget.title),
63+
),
64+
body: Center(
65+
child: Column(
66+
mainAxisAlignment: MainAxisAlignment.center,
67+
children: <Widget>[
68+
RaisedButton(
69+
onPressed: (){
70+
//Navigator.of(context).pushNamed('/data2');
71+
getData().pushNamed('/data2');
72+
},
73+
child: Text('打开Page2'),
74+
),
75+
RaisedButton(
76+
onPressed: (){
77+
//Navigator.of(context).pushNamed('/data3');
78+
getData().pushNamed('/data3');
79+
},
80+
child: Text('打开Page3'),
81+
),
82+
RaisedButton(
83+
onPressed: (){
84+
//Navigator.of(context).pushNamed('/data4');
85+
getData().pushNamed('/data4');
86+
},
87+
child: Text('打开Page4'),
88+
),
89+
],
90+
),
91+
),
92+
floatingActionButton: FloatingActionButton(
93+
onPressed: (){},
94+
tooltip: 'Increment',
95+
child: Icon(Icons.add),
96+
),
97+
);
98+
}
99+
}
100+
101+
102+
class Page2 extends StatefulWidget {
103+
@override
104+
_Page2State createState() => _Page2State();
105+
}
106+
107+
class _Page2State extends State<Page2> {
108+
@override
109+
Widget build(BuildContext context) {
110+
return Text('hello');
111+
}
112+
}
113+
114+
class Page3 extends StatefulWidget {
115+
@override
116+
_Page3State createState() => _Page3State();
117+
}
118+
119+
class _Page3State extends State<Page3> {
120+
@override
121+
Widget build(BuildContext context) {
122+
return Text('hello');
123+
}
124+
}
125+
126+
class Page4 extends StatefulWidget {
127+
@override
128+
_Page4State createState() => _Page4State();
129+
}
130+
131+
class _Page4State extends State<Page4> {
132+
@override
133+
Widget build(BuildContext context) {
134+
return Text('hello');
135+
}
136+
}

0 commit comments

Comments
 (0)