Flutter-AnimatedWidget組件源碼示例解析
AnimatedWidget組件
在日常的開發(fā)當(dāng)中,可能會(huì)出現(xiàn)Flutter SDK自帶的動(dòng)畫組件不能滿足我們實(shí)際的開發(fā)需求;
遇到這種情況,我們可以通過AnimatedWidget組件來自定義動(dòng)畫組件,這篇博客分享AnimatedWidget組件相關(guān)的內(nèi)容,記錄一次AnimatedWidget組件的源碼解讀。
AnimatedWidget組件源碼解讀
abstract class AnimatedWidget extends StatefulWidget {
const AnimatedWidget({
Key? key,
required this.listenable,
}) : assert(listenable != null),
super(key: key);
final Listenable listenable;
@protected
Widget build(BuildContext context);
@override
State<AnimatedWidget> createState() => _AnimatedState();
@override
void debugFillProperties(DiagnosticPropertiesBuilder properties) {
super.debugFillProperties(properties);
properties.add(DiagnosticsProperty<Listenable>('animation', listenable));
}
}
class _AnimatedState extends State<AnimatedWidget> {
@override
void initState() {
super.initState();
widget.listenable.addListener(_handleChange);
}
@override
void didUpdateWidget(AnimatedWidget oldWidget) {
super.didUpdateWidget(oldWidget);
if (widget.listenable != oldWidget.listenable) {
oldWidget.listenable.removeListener(_handleChange);
widget.listenable.addListener(_handleChange);
}
}
@override
void dispose() {
widget.listenable.removeListener(_handleChange);
super.dispose();
}
void _handleChange() {
setState(() {
// The listenable's state is our build state, and it changed already.
});
}
@override
Widget build(BuildContext context) => widget.build(context);
}上面是AnimatedWidget組件的源碼,解讀如下:
AnimatedWidget組件,是一個(gè)有狀態(tài)的組件,它里面就封裝是了實(shí)現(xiàn)動(dòng)畫的模板;- 構(gòu)造方法中的
listenable對(duì)象,指的是Animation對(duì)象; - 重寫
build方法,傳入一個(gè)使用動(dòng)畫的組件; _AnimatedState.initState(),給動(dòng)畫設(shè)置監(jiān)聽器,在動(dòng)畫執(zhí)行的過程中自動(dòng)調(diào)用setState()更新狀態(tài);_AnimatedState.dispose(),釋放動(dòng)畫監(jiān)聽器,防止出現(xiàn)內(nèi)存泄漏。
通過源碼的解讀,我們可以發(fā)現(xiàn)實(shí)現(xiàn)自己的自定義動(dòng)畫還是相對(duì)簡(jiǎn)單的,只需要繼承AnimatedWidget組件,然后重寫build()方法。希望這篇文章對(duì)小伙伴有所幫助。
以上就是Flutter-AnimatedWidget組件源碼示例解析的詳細(xì)內(nèi)容,更多關(guān)于Flutter-AnimatedWidget組件的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Android實(shí)戰(zhàn)教程第五篇之一鍵鎖屏應(yīng)用
這篇文章主要為大家詳細(xì)介紹了Android實(shí)戰(zhàn)教程第五篇之一鍵鎖屏應(yīng)用,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-11-11
android studio集成unity導(dǎo)出工程的實(shí)現(xiàn)
本文主要介紹了android studio集成unity導(dǎo)出工程的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-05-05
android ListView自動(dòng)滾動(dòng)方法
直接在Layout中寫即可,注意下面的stackFromBottom以及transcriptMode這兩個(gè)屬性2013-01-01
詳解Android使用CoordinatorLayout+AppBarLayout實(shí)現(xiàn)拉伸頂部圖片功能
這篇文章主要介紹了Android使用CoordinatorLayout+AppBarLayout實(shí)現(xiàn)拉伸頂部圖片功能,本文實(shí)例文字相結(jié)合給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-10-10
Android PickerView實(shí)現(xiàn)三級(jí)聯(lián)動(dòng)效果
這篇文章主要為大家詳細(xì)介紹了Android PickerView實(shí)現(xiàn)三級(jí)聯(lián)動(dòng)效果,PickerView實(shí)現(xiàn)全國(guó)地址的選擇,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-01-01
Flutter自定義實(shí)現(xiàn)神奇動(dòng)效的卡片切換視圖的示例代碼
這篇文章主要介紹了Flutter自定義實(shí)現(xiàn)神奇動(dòng)效的卡片切換視圖的示例代碼,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2019-04-04
Android用MVP實(shí)現(xiàn)一個(gè)簡(jiǎn)單的類淘寶訂單頁面的示例
本篇文章主要介紹了Android用MVP實(shí)現(xiàn)一個(gè)簡(jiǎn)單的類淘寶訂單頁面的示例,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-11-11

