- 在根组件的MaterialApp中设定onGenerateRoute参数 main.dart代码
- onGenerateRoute会监听路由的变化
import 'package:flutter/material.dart';
import 'search.dart';
import 'home.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
final routes = {
'/search':(context,{arguments})=>SearchPage(arguments:arguments),
};
@override
Widget build(BuildContext context) {
return MaterialApp(
home:HomePage(),
onGenerateRoute: (settings) {
final String name = settings.name;
final Function pageContentBuilder = this.routes[name];
if(pageContentBuilder != null){
if(settings.arguments != null){
final Route route = MaterialPageRoute(
builder: (context)=>pageContentBuilder(context,arguments:settings.arguments)
);
return route;
}else{
final Route route = MaterialPageRoute(
builder: (context)=>pageContentBuilder(context)
);
return route;
}
}
},
);
}
}
- home.dart代码
import 'package:flutter/material.dart';
class HomePage extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text("hello flutter"),
centerTitle: true,
),
body: Center(
child: RaisedButton(
child: Text("点击跳转到search页面"),
onPressed: (){
Navigator.pushNamed(context,'/search',arguments: {
"id":123
});
},
),
),
);
}
}
- search.dart代码
import 'package:flutter/material.dart';
class SearchPage extends StatelessWidget {
final arguments;
SearchPage({this.arguments});
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text("Search页面"),
centerTitle: true,
),
body: Center(
child: Text("Search页面${arguments != null ? arguments['id']:'0'} ")
),
);
}
}