(Flutter十三)頁面跳轉動畫示例

在實際開發(fā)過程中纯衍,我們需要在頁面跳轉的時候添加一些有特色的動畫效果,讓頁面看起來比較炫酷苗胀。

1襟诸、main.dart,它里面主要就是放置一個FirstPage的組件柒巫。

import 'package:flutter/material.dart';
import 'pages.dart';
void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue
      ),
      home: FirstPage(),
    );
  }
}

2励堡、pages.dart,它里面就是創(chuàng)建一個FirstPage,然后在FirstPage中放置一個icon堡掏,點擊icon進入SecondPage应结。
AppBar Widger的 elevation 屬性:設置這個屬性的值越大導航欄與頁面之間的陰影越大,一般有滾動時默認是4.0,如果設置成0.0就沒有陰影效果鹅龄。


import 'package:flutter/material.dart';
import 'package:flutterc03/customer_router.dart';

class FirstPage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      backgroundColor: Colors.blue,
      appBar: AppBar(
        title: Text('First Page',
        style: TextStyle(fontSize:36.0 ),),
        elevation: 4.0, //
      ),
      body: Center(
        child: MaterialButton(
          child: Icon(
            Icons.navigate_next,
            color: Colors.white70,
            size: 64.0,
          ),
          onPressed: (){
            Navigator.of(context).push(CustomerRoute(SecondPage()));
//            Navigator.of(context).push(MaterialPageRoute(
//              builder: (BuildContext context){
//                return SecondPage();
//            }));
          },
        ),
      ),
    );
  }
}

class SecondPage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      backgroundColor: Colors.pinkAccent,
      appBar: AppBar(
        elevation: 4.0,
        backgroundColor: Colors.pinkAccent,
        title: Text('Second Page',style: TextStyle(fontSize: 36),),
      ),
      body: Center(
        child: MaterialButton(
          child: Icon(
            Icons.navigate_before,
            color: Colors.white70,
            size: 64.0,
          ),
          onPressed: () {
            Navigator.of(context).pop();
          },
        ),
      ),
    );
  }
}

3揩慕、customer_router.dart,自定義路由,通過自定義動畫效果實現頁面跳轉時的炫酷動畫扮休。代碼中演示了四種不同的效果迎卤。逐漸消失的動畫效果、縮放的動畫效果玷坠、旋轉加縮放的動畫效果蜗搔、左右滑動的動畫效果。


import 'package:flutter/material.dart';

class CustomerRoute extends PageRouteBuilder {
  final Widget widget;
  CustomerRoute(this.widget)
  :super(
    transitionDuration:Duration(seconds: 1), pageBuilder:(
     BuildContext context,
        Animation<double> animation1,
        Animation<double> animation2,
    ){
      return widget;
    },
    transitionsBuilder:(BuildContext context,
        Animation<double> animation1,
        Animation<double> animation2,
        Widget child,
    ){
//      //逐漸消失的動畫效果
//      return FadeTransition(
//        opacity: Tween(begin: 0.0,end: 1.0) //設置不透明度
//        .animate(CurvedAnimation(
//            parent: animation1,
//            curve: Curves.fastOutSlowIn)
//        ),
//      child: child,
//      );

//    //縮放的動畫效果
//      return ScaleTransition(
//        scale: Tween(begin: 0.0, end: 1.0).animate(
//          CurvedAnimation(
//            parent: animation1,
//            curve: Curves.fastOutSlowIn
//          )
//        ),
//        child: child,
//      );

//    //旋轉+縮放動畫效果
//      return RotationTransition(
//        turns: Tween(begin: 0.0, end:1.0).animate(
//          CurvedAnimation(
//            parent: animation1,
//            curve: Curves.fastOutSlowIn,
//          )
//        ),
//        child: ScaleTransition(
//          scale: Tween(begin: 0.0, end: 1.0).animate(CurvedAnimation(
//            parent: animation1,
//            curve: Curves.fastOutSlowIn,
//          )),
//          child: child,
//        ),
//      );

    //左右滑動動畫效果
      return SlideTransition(
        position: Tween<Offset>(
          begin: Offset(-1.0,0.0),
          end: Offset(0.0, 0.0)
        ).animate(CurvedAnimation(
          parent: animation1,
          curve: Curves.fastOutSlowIn
        )),
        child: child,
      );
    }
  );
}
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末八堡,一起剝皮案震驚了整個濱河市樟凄,隨后出現的幾起案子,更是在濱河造成了極大的恐慌兄渺,老刑警劉巖缝龄,帶你破解...
    沈念sama閱讀 221,635評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現場離奇詭異挂谍,居然都是意外死亡叔壤,警方通過查閱死者的電腦和手機,發(fā)現死者居然都...
    沈念sama閱讀 94,543評論 3 399
  • 文/潘曉璐 我一進店門口叙,熙熙樓的掌柜王于貴愁眉苦臉地迎上來炼绘,“玉大人,你說我怎么就攤上這事庐扫》雇” “怎么了?”我有些...
    開封第一講書人閱讀 168,083評論 0 360
  • 文/不壞的土叔 我叫張陵形庭,是天一觀的道長铅辞。 經常有香客問我,道長萨醒,這世上最難降的妖魔是什么斟珊? 我笑而不...
    開封第一講書人閱讀 59,640評論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮富纸,結果婚禮上囤踩,老公的妹妹穿的比我還像新娘。我一直安慰自己晓褪,他們只是感情好堵漱,可當我...
    茶點故事閱讀 68,640評論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著涣仿,像睡著了一般勤庐。 火紅的嫁衣襯著肌膚如雪示惊。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,262評論 1 308
  • 那天愉镰,我揣著相機與錄音米罚,去河邊找鬼。 笑死丈探,一個胖子當著我的面吹牛录择,可吹牛的內容都是我干的。 我是一名探鬼主播碗降,決...
    沈念sama閱讀 40,833評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼隘竭,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了遗锣?” 一聲冷哼從身側響起货裹,我...
    開封第一講書人閱讀 39,736評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎精偿,沒想到半個月后,有當地人在樹林里發(fā)現了一具尸體赋兵,經...
    沈念sama閱讀 46,280評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡笔咽,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 38,369評論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現自己被綠了霹期。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片叶组。...
    茶點故事閱讀 40,503評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖历造,靈堂內的尸體忽然破棺而出甩十,到底是詐尸還是另有隱情,我是刑警寧澤吭产,帶...
    沈念sama閱讀 36,185評論 5 350
  • 正文 年R本政府宣布侣监,位于F島的核電站,受9級特大地震影響臣淤,放射性物質發(fā)生泄漏橄霉。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,870評論 3 333
  • 文/蒙蒙 一邑蒋、第九天 我趴在偏房一處隱蔽的房頂上張望姓蜂。 院中可真熱鬧,春花似錦医吊、人聲如沸钱慢。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,340評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽束莫。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間麦箍,已是汗流浹背漓藕。 一陣腳步聲響...
    開封第一講書人閱讀 33,460評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留挟裂,地道東北人享钞。 一個月前我還...
    沈念sama閱讀 48,909評論 3 376
  • 正文 我出身青樓,卻偏偏與公主長得像诀蓉,于是被迫代替她去往敵國和親栗竖。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,512評論 2 359

推薦閱讀更多精彩內容