在文件構建時先設置路由參數:ide
new MaterialApp( // 代碼 routes: { "secondPage":(BuildContext context)=>new SecondPage(), }, );
在須要作路由跳轉的時候直接使用:動畫
Navigator.pushNamed(context, "secondPage");
Navigator.push(context, new MaterialPageRoute(builder: (BuildContext context){ return new SecondPage(); }))
以上兩種路由的優缺點十分明顯:ui
構建路由能夠傳參,但比較繁瑣。this
static SlideTransition createTransition( Animation<double> animation, Widget child) { return new SlideTransition( position: new Tween<Offset>( begin: const Offset(1.0, 0.0), end: const Offset(0.0, 0.0), ).animate(animation), child: child, ); }
以上動畫意思爲跳轉時新頁面從右邊劃入,返回時向右邊劃出。code
Navigator.push<String>( context, new PageRouteBuilder(pageBuilder: (BuildContext context, Animation<double> animation, Animation<double> secondaryAnimation) { // 跳轉的路由對象 return new Wechat(); }, transitionsBuilder: ( BuildContext context, Animation<double> animation, Animation<double> secondaryAnimation, Widget child, ) { return MyStatefulWidgetState .createTransition(animation, child); }))
前面咱們說過,flutter的命名路由跳轉沒法傳參。所以,咱們只能使用構建路由的方式傳參:對象
Navigator.push(context, new MaterialPageRoute(builder: (BuildContext context){ return new SecondPage( title:'此處爲參數', name:'此處爲名字參數' ); }))
class SecondPage extends StatefulWidget { String title; String name; Wechat({ Key key, this.title, this.name }) : super(key: key); @override State<StatefulWidget> createState() { return new MyStatefulWidgetState(); } }
當觸發路由返回的事件時,傳參是十分簡單的。和跳轉時的方式同樣,甚至更簡單,只須要:事件
Navigator.of(context).pop('這個是要返回給上一個頁面的數據');
可是,在接受返回時的數據須要改造前面觸發跳轉時的路由:路由
// 命名路由 Navigator.pushNamed<String>(context, "ThirdPage").then( (String value){ //處理代碼 }); // 構建路由 Navigator.push<String>(context, new MaterialPageRoute(builder: (BuildContext context){ return new ThirdPage(title:"請輸入暱稱"); })).then( (String result){ //處理代碼 });
以上就是Flutter路由的跳轉、動畫以及傳參的相關方法,依葫蘆畫瓢便可輕鬆應對。get