命名路由如果在initstate中接收路由参数,需要通过重定向路由把参数转发到接收参数的页面
step1.在main中定义重定向路由
Widget build(Object context) {
return MaterialApp(
home: Tabs(),
theme: ThemeData(primaryColor: Colors.green),
routes: route,
// 重定向路由
onGenerateRoute: (RouteSettings settings) {
print('build route for ${settings.name}');
var routes = <String, WidgetBuilder>{
//在此处设置路由,如果有单独路由表的,需要删除路由表上的路由
"/newsdetail": (ctx) => NewsDetailPage(settings.arguments),
};
WidgetBuilder builder = routes[settings.name];
return MaterialPageRoute(builder: (ctx) => builder(ctx));
},
);
}
step2。发起页面跳转的Navigator.pushNamed
Navigator.pushNamed(context, "/newsdetail",
arguments: "${this._newList[index]["aid"]}"); //替换路由
step3.接收参数的页面
class NewsDetailPage extends StatefulWidget {
//定义接收参数的构造函数
final aid;
NewsDetailPage(this.aid, {Key key}) : super(key: key);
@override
_NewsDetailPageState createState() => _NewsDetailPageState(this.aid);
}
class _NewsDetailPageState extends State<NewsDetailPage> {
_NewsDetailPageState(this.aid);
var aid;
List _list = [];
@override
void initState() {
// TODO: implement initState
super.initState();
this._getNewsDetail();
}