最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

一文詳解Flutter Widget和App的生命周期

 更新時(shí)間:2023年08月06日 09:44:42   作者:Rocky_ruan  
這篇文章主要為大家介紹了Flutter Widget和App的生命周期示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

一:StatefulWidget 生命周期

StatefulWidget 組件生命周期分為三組:

  • 1.初始化期:createState() ,initState()
  • 2.更新期:didChangeDependencies(),build(BuildContext context),didUpdateWidget()
  • 3.銷毀期:deactivate(),dispose()

1.createState()

  • (1)創(chuàng)建StatefulWidget之后調(diào)用的第一個(gè)方法
  • (2)該方法是抽象方法 , 必須覆蓋重寫該方法

2.initState()

  • (1)該方法是創(chuàng)建 Widget 組件時(shí)除構(gòu)造方法之外的第一個(gè)方法
  • (2) 對應(yīng) Android 中的 onCreate 方法 ; 對應(yīng) iOS 中的 viewDidLoad 方法
  • (3)在該方法中執(zhí)行一些初始化操作

3.didChangeDependencies()

  • 1)創(chuàng)建 Widget 組件時(shí) , 調(diào)用完 initState 方法后 , 調(diào)用該方法
  • (2)InheritedWidget 相關(guān) ( 暫不涉及 ) ;

4.build()

  • (1)調(diào)用完 didChangeDependencies 方法后調(diào)用該方法
  • (2)調(diào)用 setState 方法之后 , 該方法也會(huì)被調(diào)用 ;
  • (3)頁面每次渲染時(shí)都會(huì)調(diào)用該方法

5.didUpdateWidget()

  • (1)該生命周期方法不經(jīng)常調(diào)用 , 只有在父容器組件重繪時(shí)才調(diào)用該方法
  • (2)傳入的 oldWidget 參數(shù)是舊的組件信息 , 將當(dāng)前的 Widget 與舊的 Widget 進(jìn)行對比 , 如果不相等 , 便執(zhí)行額外操作 ;

6.deactivate()

該生命周期方法不經(jīng)常調(diào)用 , 只有在組件被移除時(shí)才調(diào)用

7.dispose()

組件被銷毀時(shí)調(diào)用 , 要在該方法中進(jìn)行資源的釋放與銷毀操作

8.reassemble()

此回調(diào)是專門為了開發(fā)調(diào)試而提供的,在熱重載(hot reload)時(shí)會(huì)被調(diào)用,此回調(diào)在Release模式下永遠(yuǎn)不會(huì)被調(diào)用

import 'package:flutter/material.dart';
class TestSheng extends StatefulWidget {
  const TestSheng({Key? key}) : super(key: key);
  /// 1. 初始化期的生命周期函數(shù)
  /// 創(chuàng)建 StatefulWidget 之后調(diào)用的第一個(gè)方法 ,
  /// 該方法是抽象方法 , 必須覆蓋
  @override
  State<StatefulWidget> createState() => _TestShengState();
}
class _TestShengState extends State<TestSheng> {
  /// 2. 初始化期的生命周期函數(shù)
  /// 該方法是創(chuàng)建 Widget 組件時(shí)除構(gòu)造方法之外的第一個(gè)方法
  /// 該方法對應(yīng) Android 中的 onCreate 方法
  /// 對應(yīng) iOS 中的 viewDidLoad 方法
  /// 常用用法 : 在該方法中執(zhí)行一些初始化操作
  @override
  void initState() {
    super.initState();
    print("initState()");
  }
  /// 3. 更新期的生命周期函數(shù)
  /// 方法調(diào)用時(shí)機(jī) :
  /// 創(chuàng)建 Widget 組件時(shí) , 調(diào)用完 initState 方法后 , 調(diào)用該方法
  /// InheritedWidget 相關(guān) ( 暫不涉及 )
  @override
  void didChangeDependencies() {
    super.didChangeDependencies();
    print("didChangeDependencies()");
  }
  /// 4. 更新期的生命周期函數(shù)
  /// 方法調(diào)用時(shí)機(jī) :
  /// 調(diào)用完 didChangeDependencies 方法后調(diào)用該方法
  /// 調(diào)用 setState 方法之后 , 該方法也會(huì)被調(diào)用 ;
  /// 頁面每次渲染時(shí)都會(huì)調(diào)用該方法
  @override
  Widget build(BuildContext context) {
    print("build()");
    return Scaffold(
      appBar: AppBar(
        //標(biāo)題
        title: Text("StatefulWidget 生命周期"),
        //回退
        leading: BackButton(),
      ),
      body: Center(
        child: Column(
          children: <Widget>[
            //點(diǎn)擊事件
            RaisedButton(
                onPressed: (){
                  //回調(diào)生命周期
                  setState(() {
                  });
                },
              child: Text("調(diào)用setState()方法"),
                )
          ],
        ),
      ),
    );
  }
  ///此回調(diào)是專門為了開發(fā)調(diào)試而提供的,在熱重載(hot reload)時(shí)會(huì)被調(diào)用,此回調(diào)在Release模式下永遠(yuǎn)不會(huì)被調(diào)用
  @override
  void reassemble() {
    super.reassemble();
    print("reassemble()");
  }
  /// 5. 更新期的生命周期函數(shù)
  /// 方法調(diào)用時(shí)機(jī) : 該生命周期方法不經(jīng)常調(diào)用 , 只有在父容器組件重繪時(shí)才調(diào)用該方法
  /// 方法機(jī)制 : 傳入的 oldWidget 參數(shù)是舊的組件信息 ,
  /// 將當(dāng)前的 Widget 與舊的 Widget 進(jìn)行對比 , 如果不相等 , 便執(zhí)行額外操作
  /// 如 : 組件的屬性不相等 , 字段的值不相等
  @override
  void didUpdateWidget(covariant TestSheng oldWidget) {
    super.didUpdateWidget(oldWidget);
    print("didUpdateWidget()");
  }
  /// 6 . 銷毀期的生命周期函數(shù)
  /// 方法調(diào)用時(shí)機(jī) : 該生命周期方法不經(jīng)常調(diào)用 , 只有在組件被移除時(shí)才調(diào)用
  /// 該方法在 dispose 方法之前被調(diào)用
  @override
  void deactivate() {
    super.deactivate();
    print("deactivate()");
  }
  @override
  void dispose() {
    super.dispose();
    print("dispose()");
  }
}

點(diǎn)擊運(yùn)行或者使用shift+F10,生命周期會(huì)走,調(diào)試模式會(huì)走一次熱重載

I/flutter (10876): initState()
I/flutter (10876): didChangeDependencies()
I/flutter (10876): build()
I/flutter (10876): reassemble()
I/flutter (10876): didUpdateWidget()
I/flutter (10876): build()

點(diǎn)擊熱重載和crl+\ 生命周期會(huì)走

I/flutter (10876): reassemble()
I/flutter (10876): didUpdateWidget()
I/flutter (10876): build()

點(diǎn)擊setState 會(huì)調(diào)用

I/flutter (10876): build()

二:StatelessWidget 組件生命周期函數(shù)

StatelessWidget 組件生命周期函數(shù) : 只有兩個(gè) , 分別是 createElement() , build() 兩個(gè)方法 ;

abstract class StatelessWidget extends Widget {
  /// Initializes [key] for subclasses.
  const StatelessWidget({ Key key }) : super(key: key);
  @override
  StatelessElement createElement() => StatelessElement(this);
  @protected
  Widget build(BuildContext context);
}

以上就是一文詳解Flutter Widget和App的生命周期的詳細(xì)內(nèi)容,更多關(guān)于Flutter Widget App生命周期的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 輕松實(shí)現(xiàn)功能強(qiáng)大的Android刮獎(jiǎng)效果控件(ScratchView)

    輕松實(shí)現(xiàn)功能強(qiáng)大的Android刮獎(jiǎng)效果控件(ScratchView)

    這篇文章主要為大家詳細(xì)介紹了ScratchView如何一步步打造萬能的Android刮獎(jiǎng)效果控件,,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-09-09
  • Android系統(tǒng)的五種數(shù)據(jù)存儲(chǔ)形式實(shí)例(二)

    Android系統(tǒng)的五種數(shù)據(jù)存儲(chǔ)形式實(shí)例(二)

    Android系統(tǒng)有五種數(shù)據(jù)存儲(chǔ)形式,分別是文件存儲(chǔ)、SP存儲(chǔ)、數(shù)據(jù)庫存儲(chǔ)、contentprovider 內(nèi)容提供者、網(wǎng)絡(luò)存儲(chǔ)。本文介紹了Android系統(tǒng)的五種數(shù)據(jù)存儲(chǔ)形式,有興趣的可以了解一下。
    2016-12-12
  • Android?Compose狀態(tài)改變動(dòng)畫animateXxxAsState使用詳解

    Android?Compose狀態(tài)改變動(dòng)畫animateXxxAsState使用詳解

    這篇文章主要為大家介紹了Android?Compose狀態(tài)改變動(dòng)畫animateXxxAsState使用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-11-11
  • Android系統(tǒng)中的藍(lán)牙連接程序編寫實(shí)例教程

    Android系統(tǒng)中的藍(lán)牙連接程序編寫實(shí)例教程

    這篇文章主要介紹了Android系統(tǒng)中的藍(lán)牙連接程序編寫實(shí)例教程,包括藍(lán)牙的設(shè)備查找及自動(dòng)配對等各種基礎(chǔ)功能的實(shí)現(xiàn),十分給力,需要的朋友可以參考下
    2016-04-04
  • PowerManagerService之亮屏流程示例分析

    PowerManagerService之亮屏流程示例分析

    這篇文章主要為大家介紹了PowerManagerService之亮屏流程示例分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-10-10
  • android重力感應(yīng)開發(fā)之微信搖一搖功能

    android重力感應(yīng)開發(fā)之微信搖一搖功能

    這篇文章主要為大家詳細(xì)介紹了android重力感應(yīng)開發(fā)之微信搖一搖功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-05-05
  • Android模擬器中窗口截圖存成文件實(shí)現(xiàn)思路及代碼

    Android模擬器中窗口截圖存成文件實(shí)現(xiàn)思路及代碼

    Android模擬器內(nèi)容是用OpenGL渲染的,所以用一般的編程截圖(如PrintWindow()等)會(huì)是黑屏。這是因?yàn)楫嫷臇|西放在framebuffer里 接下來介紹如何實(shí)現(xiàn)Android模擬器中窗口截圖存成文件,感興趣的朋友可以了解下哦
    2013-01-01
  • Android 10 適配攻略小結(jié)

    Android 10 適配攻略小結(jié)

    這篇文章主要介紹了Android 10 適配攻略小結(jié),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-03-03
  • Flutter實(shí)現(xiàn)Text完美封裝

    Flutter實(shí)現(xiàn)Text完美封裝

    本文詳細(xì)講解了Flutter實(shí)現(xiàn)Text完美封裝,文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以收藏下,方便下次瀏覽觀看
    2021-11-11
  • Android 中menu同時(shí)顯示圖標(biāo)和文字的實(shí)現(xiàn)

    Android 中menu同時(shí)顯示圖標(biāo)和文字的實(shí)現(xiàn)

    這篇文章主要介紹了Android 中menu同時(shí)顯示圖標(biāo)和文字的實(shí)現(xiàn)的相關(guān)資料,希望通過本文能幫助到大家實(shí)現(xiàn)這樣的功能,需要的朋友可以參考下
    2017-10-10

最新評(píng)論

略阳县| 陆丰市| 家居| 儋州市| 克拉玛依市| 右玉县| 义马市| 广州市| 金华市| 兖州市| 通州市| 普定县| 蒙城县| 大厂| 枣阳市| 台北县| 南安市| 蒲江县| 乐平市| 衡阳市| 探索| 青阳县| 长泰县| 婺源县| 宜阳县| 曲靖市| 新源县| 和林格尔县| 青河县| 贵港市| 临沧市| 汉川市| 海伦市| 明星| 蒙山县| 威海市| 蓝田县| 那曲县| 顺昌县| 台南县| 鹿邑县|