Flutter有無狀態(tài)類與State及生命周期詳細(xì)介紹
Flutter中的生命周期類似于Vue、React中的生命周期一樣,有初始化、狀態(tài)更新、停用、銷毀等。
在React中,組件分為函數(shù)式組件和類式組件,它們的區(qū)別就是一個無狀態(tài)、一個有狀態(tài)。那么在Flutter中亦是如此,它有兩種類,一種是無狀態(tài)類,一種是有狀態(tài)類。其生命周期的使用就是有狀態(tài)類的特定用法。
無狀態(tài)類
無狀態(tài)類內(nèi)部有build方法,在表面上看 每次數(shù)據(jù)更新都會執(zhí)行build方法。但實(shí)際上,在組件樹中,當(dāng)每次數(shù)據(jù)發(fā)生變更時,無狀態(tài)類都會重新執(zhí)行組件LessComponent對象。
class LessComponent extends StatelessWidget { const LessComponent({Key? key}) : super(key: key); @override Widget build(BuildContext context) { return Container(); } }
有狀態(tài)類
在有狀態(tài)類中,每次的數(shù)據(jù)發(fā)生變動,在組件樹中只會調(diào)用state下的build方法進(jìn)行重新渲染。這時候就能保存state中的狀態(tài)。
所謂的狀態(tài)就是 state里的屬性。
class FulComponent extends StatefulWidget { const FulComponent({Key? key}) : super(key: key); @override _FulComponentState createState() => _FulComponentState(); } class _FulComponentState extends State<FulComponent> { @override Widget build(BuildContext context) { return Container(); } }
狀態(tài)
剛才講到,狀態(tài)就是state中的屬性值。下面來個示例進(jìn)行講解:
class FulComponent extends StatefulWidget { const FulComponent({Key? key}) : super(key: key); @override _FulComponentState createState() => _FulComponentState(); } class _FulComponentState extends State<FulComponent> { int count = 0; static const sum = 10; final nowDate = new DateTime.now(); @override Widget build(BuildContext context) { return Container( child: Column( children: [ Text('${sum}'), ElevatedButton.icon( onPressed: () { setState(() { count++; }); }, icon: Icon(Icons.add), label: Text('添加') ) ], ), ); } }
例如 整型值count、常量 sum、當(dāng)前時間。這都是屬于狀態(tài)值,它們存在的區(qū)別就是count可以通過setSatate
進(jìn)行改變。
當(dāng)每次執(zhí)行setState()
時,此組件都會調(diào)用build方法進(jìn)行將改變的數(shù)據(jù)進(jìn)行重新渲染,以此來保證state中的屬性值的保存。
State生命周期
class FulComponent extends StatefulWidget { const FulComponent({Key? key}) : super(key: key); @override _FulComponentState createState() => _FulComponentState(); } class _FulComponentState extends State<FulComponent> { int count = 0; static const sum = 10; final nowDate = new DateTime.now(); @override void initState() { // 初始化生命周期鉤子 super.initState(); //初始化操作 在這里做 } @override void didChangeDependencies() { super.didChangeDependencies(); // 依賴發(fā)生變更時 執(zhí)行 } @override void reassemble() { super.reassemble(); // 重新安裝時執(zhí)行,一般在調(diào)試的時候用,在發(fā)正式版本時 不會執(zhí)行 } @override void didUpdateWidget(covariant FulComponent oldWidget) { super.didUpdateWidget(oldWidget); // 組件發(fā)生變更時調(diào)用,當(dāng)父組件有變動,子組件也會執(zhí)行此方法 } @override void deactivate() { super.deactivate(); // 停用 } @override void dispose() { super.dispose(); // 銷毀 } @override Widget build(BuildContext context) { return Container( child: Column( children: [ Text('${sum}'), ElevatedButton.icon( onPressed: () { setState(() { count++; }); }, icon: Icon(Icons.add), label: Text('添加') ) ], ), ); } }
到此這篇關(guān)于Flutter有無狀態(tài)類與State及生命周期詳細(xì)介紹的文章就介紹到這了,更多相關(guān)Flutter狀態(tài)類內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Android Studio導(dǎo)入Project與Module的方法及實(shí)例
這篇文章主要介紹了Android Studio導(dǎo)入Project與Module的方法及實(shí)例的相關(guān)資料,需要的朋友可以參考下2017-04-04Android程序開發(fā)之使用Design包實(shí)現(xiàn)QQ動畫側(cè)滑效果和滑動菜單導(dǎo)航
這篇文章主要介紹了Android程序開發(fā)之使用Design包實(shí)現(xiàn)QQ動畫側(cè)滑效果和滑動菜單導(dǎo)航的相關(guān)資料,非常不錯,具有參考借鑒價值,需要的朋友可以參考下2016-07-07Android Studio preview 不固定及常見問題的解決辦法
preview 可以幫助您預(yù)覽您的布局文件將如何在用戶的設(shè)備上呈現(xiàn)。這篇文章主要介紹了Android Studio preview 不固定及常見問題的解決辦法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-05-05android 獲取本機(jī)的IP地址和mac物理地址的實(shí)現(xiàn)方法
本文主要介紹android 獲取本機(jī)的IP地址和mac物理地址的實(shí)現(xiàn)方法,這里提供示例代碼,實(shí)現(xiàn)功能,有需要的小伙伴可以參考下2016-09-09Kotlin實(shí)現(xiàn)在類里面創(chuàng)建main函數(shù)
這篇文章主要介紹了Kotlin實(shí)現(xiàn)在類里面創(chuàng)建main函數(shù),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-03-03Android Studio實(shí)現(xiàn)音樂播放器
這篇文章主要為大家詳細(xì)介紹了Android Studio實(shí)現(xiàn)音樂播放器,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2020-11-11