iT邦幫忙

2021 iThome 鐵人賽

DAY 20
0

前言
通過Hero,我們可以在兩個路由之間做出流暢的轉場動畫,Hero會在Source、Overlay、Destination三個畫面下運行。

基本用法
Hero有兩個元素,分別是源元件和目標群元件,兩者都需要包裹在Hero裡面。

源路由的Hero
https://ithelp.ithome.com.tw/upload/images/20211002/20140524h240x8tDM4.png
目標路由中的Hero
https://ithelp.ithome.com.tw/upload/images/20211002/20140524IgOCGrPCxO.png

原理
我們分成動畫開始時、動畫進行中、動畫結束三個部份來解釋。
(一)動畫開始:t=0.0
在動畫開始時,Flutter會計算出Hero的位置並複製,然後繪製到Overlay上,
複製的Hero和來源Hero大小一致。
https://ithelp.ithome.com.tw/upload/images/20211002/20140524mI9iqOvnqr.png
(二)動畫進行中
動畫實現的過程中,Flutter會逐漸把來源Hero移出螢幕,而動畫的進行是依靠Tween來實現,透過createRectTween屬性把Tween傳給Hero。
https://ithelp.ithome.com.tw/upload/images/20211002/20140524Yd51FpvfAP.png
(三)動畫結束:t=1.0
Flutter將Overlay中的Hero移除,並使目標Hero出現在目標路由的最終位置。
https://ithelp.ithome.com.tw/upload/images/20211002/20140524poMyZAlzXW.png

其實Hero動畫很複雜,但我只是簡單做介紹,如果對這個有興趣的話建議可以去參考官方網站,明天將會介紹網路通訊協定,敬請期待。

參考資料
橫跨Android及Apple的神話:用Dart語言神啟Flutter大業5.3節
https://codertw.com/%E7%A8%8B%E5%BC%8F%E8%AA%9E%E8%A8%80/720521/
https://ithelp.ithome.com.tw/articles/10224215
https://ithelp.ithome.com.tw/articles/10224756
https://github.com/chienhuikuo/Flutter_2020ironman/blob/master/lib/hero.dart


上一篇
Day 19動畫的封裝與簡化
下一篇
Day 21網路通訊協定
系列文
一起學Flutter,和我變Better!30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言