// 不传参
Navigator.push(
context,
new MaterialPageRoute(builder: (context) => new SecondScreen()),
);
//传参
Navigator.push(
context,
new MaterialPageRoute(
builder: (context) => new ContentScreen(articles[index]),
),
);
// 不一样写法
Navigator.push<String>(context, new MaterialPageRoute(
builder: (BuildContext context) {
return new Add(title: i.toString());
},
));
// 接收
final Article article;
ContentScreen(this.article);
final String title; // 储存传递过来的参数
Add({this.title});
复制代码
// 不传参
Navigator.pop(context);
// 传参
Navigator.pop(context, 'Like');
// 接收
void add() async{
String result = await Navigator.push(context, MaterialPageRoute(
builder: (BuildContext context) {
return new Add();
},
));
print(result);
}
复制代码
onTap: () async {
String result = await Navigator.push(
context,
new PageRouteBuilder(
transitionDuration: const Duration(milliseconds: 1000),
pageBuilder: (context, _, __) =>
new ContentScreen(articles[index]),
transitionsBuilder:
(_, Animation<double> animation, __, Widget child) =>
new FadeTransition(
opacity: animation,
child: new RotationTransition(
turns: new Tween<double>(begin: 0.0, end: 1.0)
.animate(animation),
child: child,
),
),
));
if (result != null) {
Scaffold.of(context).showSnackBar(
new SnackBar(
content: new Text("$result"),
duration: const Duration(seconds: 1),
),
);
}
},
复制代码
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return new MaterialApp(
title: 'Navigation',
initialRoute: '/',
routes: <String, WidgetBuilder>{
'/': (BuildContext context) => new ArticleListScreen(),
'/new': (BuildContext context) => new NewArticle(),
},
);
}
}
// 跳转
Navigator.of(context).pushNamed('/new');
Navigator.pushNamed(context, '/b');
复制代码
普通跳转bash
跳转新页面而且替换原页面,好比登陆页跳转主页, 当新的页面进入后,以前的页面将执行dispose方法less
Navigator.of(context).pushReplacementNamed('/home');
复制代码
同pushReplacementNamed 写法不一样 可传递参数async
Navigator.of(context).pushReplacement(new MaterialPageRoute(builder: (context) => new Home()));
复制代码
销毁当前页面并跳转指向新的页面 动画不太友好ide
跳转到新的路由,而且关闭给定路由的以前的全部页面函数
指将制定的页面加入到路由中,而后将其余全部的页面所有pop, (Route route) => false将确保删除推送路线以前的全部路线。 这时候将打开一个新的screen4页面动画
Navigator.of(context).pushNamedAndRemoveUntil('/home', (route) => route == null);
// 到red为止
Navigator.of(context).pushNamedAndRemoveUntil('/home', ModalRoute.withName('/red'));
复制代码
同pushNamedAndRemoveUntil 写法不一样 可传递参数ui
Navigator.of(context).pushAndRemoveUntil(MaterialPageRoute(builder: (context) => new Home()), ModalRoute.withName('/home'));
复制代码
pop直到...为止this
Navigator.of(context).popUntil(ModalRoute.withName('/red'));
复制代码
onGenerateRoute : 生成路由的回调函数,当导航的命名路由的时候,会使用这个来生成界面spa
// 跳转
Navigator.of(context).pushNamed('/add/' + i.toString());
// 定义
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return new MaterialApp(
title: 'TODO',
theme: new ThemeData(
primaryColor: Colors.purple,
),
home: new Home(),
routes: <String, WidgetBuilder>{
'/add': (context) => new Add()
},
onGenerateRoute: (RouteSettings settings) {
print(settings);
WidgetBuilder builder;
if (settings.name == '/') {
builder = (BuildContext context) => new Add();
} else {
String param = settings.name.split('/')[2];
builder = (BuildContext context) => new Add();
}
return new MaterialPageRoute(builder: builder, settings: settings);
}
);
}
}
复制代码
属于MaterialApp下面的一个路由方法code