最簡單的Flutter路由教程——跳轉、動畫與傳參

跳轉

命名路由

在文件構建時先設置路由參數:

new MaterialApp(
  // 代碼
  routes: {
    "secondPage":(BuildContext context)=>new SecondPage(),
  },
);
複製代碼

在需要做路由跳轉的時候直接使用:

Navigator.pushNamed(context, "secondPage");
複製代碼

構建路由

Navigator.push(context, new MaterialPageRoute(builder: (BuildContext context){
  return new SecondPage();
}))
複製代碼

區別

以上兩種路由的優缺點十分明顯:

  1. 命名路由簡明並且系統,但是不能傳參。
  2. 構建路由可以傳參,但比較繁瑣。

動畫

構建動畫

先在構建一個動畫效果,如:

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,
    );
}
複製代碼

以上動畫意思爲跳轉時新頁面從右邊劃入,返回時向右邊劃出。

引入動畫

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路由的跳轉、動畫以及傳參的相關方法,依葫蘆畫瓢即可輕鬆應對。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章