Flutter路由的跳轉、動畫與傳參(最簡單)

跳轉

命名路由

在文件構建時先設置路由參數: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

  1. 命名路由簡明而且系統,可是不能傳參。
  2. 構建路由能夠傳參,但比較繁瑣。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

相關文章
相關標籤/搜索