- 和普通路由相比,命名路由可以对路由进行统一管理
- 命名路由需要定义在根组件里面 MaterialApp提供了一个routes参数,可以在这个参数里面进行路由配置
import 'package:flutter/material.dart';
import 'views/detail.dart';
import 'views/search.dart';
main(List<String> args) {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title:"hello flutter",
home: MyStackPage(),
theme: ThemeData(
primaryColor: Color(0xffbadc58),
highlightColor: Colors.transparent,
splashColor: Colors.transparent,
),
routes: {
'/detail':(context)=>DetailContent('123'),
'/search':(context)=>SearchPage(),
},
);
}
}
- routes参数接受map类型的数据
- 在button组件的点击事件函数中增加路由跳转的代码
import 'package:flutter/material.dart';
import 'package:douban_demo/views/holiday/holiday.dart';
import '../detail.dart';
class Home extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text("首页"),
centerTitle: true,
),
body: HomeBody()
);
}
}
class HomeBody extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Container(
alignment: Alignment.center,
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
RaisedButton(
child: Text("普通路由跳转到其他页面"),
onPressed: (){
Navigator.of(context).push(
MaterialPageRoute(builder: (BuildContext context){
return Holiday();
})
);
},
),
SizedBox(height: 20,),
RaisedButton(
child: Text("通过普通路由跳转到Detail页面并传递参数"),
onPressed: (){
Navigator.of(context).push(
MaterialPageRoute(builder: (context)=>DetailContent("hello google"))
);
},
),
RaisedButton(
child: Text("通过命名路由跳转到Search页面"),
onPressed: (){
Navigator.pushNamed(context, '/search');
},
)
],
),
);
}
}
- 跳转页面的代码如下
import 'package:flutter/material.dart';
class SearchPage extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
centerTitle: true,
title: Text("我是Searh页面"),
),
body: Center(
child: Text("我是Search页面"),
),
);
}
}