Flutter有無狀態(tài)類與State及生命周期詳細介紹
Flutter中的生命周期類似于Vue、React中的生命周期一樣,有初始化、狀態(tài)更新、停用、銷毀等。
在React中,組件分為函數(shù)式組件和類式組件,它們的區(qū)別就是一個無狀態(tài)、一個有狀態(tài)。那么在Flutter中亦是如此,它有兩種類,一種是無狀態(tài)類,一種是有狀態(tài)類。其生命周期的使用就是有狀態(tài)類的特定用法。
無狀態(tài)類
無狀態(tài)類內部有build方法,在表面上看 每次數(shù)據(jù)更新都會執(zhí)行build方法。但實際上,在組件樹中,當每次數(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ā)生變動,在組件樹中只會調用state下的build方法進行重新渲染。這時候就能保存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中的屬性值。下面來個示例進行講解:
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、當前時間。這都是屬于狀態(tài)值,它們存在的區(qū)別就是count可以通過setSatate進行改變。
當每次執(zhí)行setState()時,此組件都會調用build方法進行將改變的數(shù)據(jù)進行重新渲染,以此來保證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í)行,一般在調試的時候用,在發(fā)正式版本時 不會執(zhí)行
}
@override
void didUpdateWidget(covariant FulComponent oldWidget) {
super.didUpdateWidget(oldWidget);
// 組件發(fā)生變更時調用,當父組件有變動,子組件也會執(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('添加')
)
],
),
);
}
}到此這篇關于Flutter有無狀態(tài)類與State及生命周期詳細介紹的文章就介紹到這了,更多相關Flutter狀態(tài)類內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Android App實現(xiàn)監(jiān)聽軟鍵盤按鍵的三種方式
本篇文章主要介紹Android App實現(xiàn)監(jiān)聽軟鍵盤按鍵的三種方式,具有一定的參考價值,感興趣的小伙伴們可以參考一下。2017-03-03
Android使用MulticastSocket實現(xiàn)多點廣播圖片
這篇文章主要為大家詳細介紹了Android使用MulticastSocket實現(xiàn)多點廣播圖片,具有一定的參考價值,感興趣的小伙伴們可以參考一下2019-01-01
Android入門之Fragment嵌套Fragment的用法詳解
這篇文章主要為大家詳細介紹了Android中如何實現(xiàn)Fragment嵌套Fragment的相關資料,文中的示例代碼講解詳細,具有一定的借鑒價值,需要的可以參考一下2023-02-02
Android 解決ScrollView嵌套CridView顯示問題
這篇文章主要介紹了Android 解決ScrollView嵌套CridView顯示問題的相關資料,使用ScrollView嵌套CridView的時候會出現(xiàn)顯示不全的問題,這里提供解決辦法,需要的朋友可以參考下2017-08-08

