命名路由+参数传递
import 'package:flutter/material.dart';
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: '命名路由',
initialRoute: '/', //应用首页
routes: {
//注册路由表
'/': (context) => NamedRoute(),
'second_page': (context) => SecondPage(),
'third_page': (context) {
return ThirdPage(
text: ModalRoute.of(context).settings.arguments, //传参配置
);
}
},
);
}
}
class NamedRoute extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('命名路由demo'),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
RaisedButton(
child: Text('toSecondPage'),
onPressed: () {
Navigator.pushNamed(context, 'second_page', arguments: '传值成功'); //命名路由跳转、传值
},
),
RaisedButton(
child: Text('toThirdPage'),
onPressed: () async { //异步函数
var result = await Navigator.pushNamed(context, 'third_page',
arguments: '传值给第三页面');
print('返回值:$result'); //打印返回值
},
)
],
)));
}
}
class SecondPage extends StatelessWidget {
@override
Widget build(BuildContext context) {
var args = ModalRoute.of(context).settings.arguments; //接收传过来的参数
return Scaffold(
appBar: AppBar(
title: Text('SecondPage'),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[Text('路由2'), Text(args)],
),
),
);
}
}
class ThirdPage extends StatelessWidget {
ThirdPage({Key key, @required this.text}) : super(key: key); //接收参数
final String text;
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Third Page'),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Text(text),
RaisedButton(
onPressed: () => Navigator.pop(context, '我是返回值'),
child: Text('返回'),
)
],
),
),
);
}
}
运行效果: