Flutter-AnimatedWidget組件源碼示例解析
AnimatedWidget組件
在日常的開發(fā)當中,可能會出現(xiàn)Flutter SDK
自帶的動畫組件不能滿足我們實際的開發(fā)需求;
遇到這種情況,我們可以通過AnimatedWidget
組件來自定義動畫組件
,這篇博客分享AnimatedWidget
組件相關的內(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
組件,是一個有狀態(tài)的組件,它里面就封裝是了實現(xiàn)動畫的模板;- 構造方法中的
listenable
對象,指的是Animation
對象; - 重寫
build
方法,傳入一個使用動畫的組件; _AnimatedState.initState()
,給動畫設置監(jiān)聽器,在動畫執(zhí)行的過程中自動調(diào)用setState()
更新狀態(tài);_AnimatedState.dispose()
,釋放動畫監(jiān)聽器,防止出現(xiàn)內(nèi)存泄漏。
通過源碼的解讀,我們可以發(fā)現(xiàn)實現(xiàn)自己的自定義動畫還是相對簡單的,只需要繼承AnimatedWidget
組件,然后重寫build()
方法。希望這篇文章對小伙伴有所幫助。
以上就是Flutter-AnimatedWidget組件源碼示例解析的詳細內(nèi)容,更多關于Flutter-AnimatedWidget組件的資料請關注腳本之家其它相關文章!
相關文章
使用adb命令向Android模擬器中導入通訊錄聯(lián)系人的方法
這篇文章主要介紹了使用adb命令向Android模擬器中導入通訊錄聯(lián)系人的方法,實例分析了導入通訊錄存儲文件的技巧,需要的朋友可以參考下2015-01-01Android 中通過ViewDragHelper實現(xiàn)ListView的Item的側拉劃出效果
這篇文章主要介紹了 Android 中通過ViewDragHelper實現(xiàn)ListView的Item的側拉劃出效果,需要的朋友可以參考下2017-08-08Android TimePicker 直接輸入的問題解決方案
這篇文章主要介紹了Android TimePicker 直接輸入的問題解決方案的相關資料,需要的朋友可以參考下2017-04-04Android 重寫ViewGroup 分析onMeasure()和onLayout()方法
這篇文章主要介紹了Android 重寫ViewGroup 分析onMeasure()和onLayout()方法的相關資料,需要的朋友可以參考下2017-06-06Android App支付系列(一):微信支付接入詳細指南(附官方支付demo)
這篇文章主要介紹了Android App支付系列(一):微信支付接入詳細指南(附官方支付demo) ,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2016-11-11