Flutter的生命周期方法

Flutter的生命周期執行時機可以分為兩個主要部分:Flutter本身的組件生命周期(widget生命周期)和平臺相關的應用程序生命周期(APP生命周期)。

Widget生命周期

Widget生命周期可以細分為三個階段:

  1. 初始化階段

    在這個階段,Flutter會執行構造方法和initStateinitState是widget創建執行的第一個方法,只會調用一次,可以在這里進行一些初始化工作,如初始化State的變量。
  2. 狀態變化階段

    當需要創建新的widget或者調用setState方法時,Flutter會進入狀態變化階段。setState方法用于通知Flutter框架該組件的狀態發生了變化,并觸發組件的重新構建。
  3. 銷毀階段

    當widget從渲染樹中被移除時,會依次執行deactivatedispose方法。deactivate方法在widget被移除之前調用(隱式,未暴露給開發者,不能直接覆蓋這個方法),而dispose方法在State對象從樹中被永久移除時調用,通常在此回調中釋放資源。

另外,還有一個reassemble方法,它在熱重載(hot reload)時會被調用,但在Release模式下永遠不會被調用。

APP生命周期

APP生命周期主要通過WidgetsBindingObserverdidChangeAppLifecycleState方法來獲取。這個方法會在應用程序的生命周期狀態發生變化時調用,例如應用程序進入前臺或后臺。

入口點

Flutter應用程序的入口點是main()函數。在這個函數中,Flutter框架會被初始化,并調用runApp()函數來啟動應用程序。runApp()函數會創建一個實例(通常是WidgetsAppMaterialApp),并將其渲染到設備的屏幕上。當應用程序啟動時,會觸發相應的生命周期回調方法。

StatelessWidget

值得注意的是,StatelessWidget是一種無狀態的Widget,在Flutter中沒有顯式的生命周期方法。它的生命周期只有一個build過程,每次在頁面刷新時都會調用build方法來創建widget。小部件的依賴關系發生變化(例如,此小部件引用的 InheritedWidget 更改)時,框架也會調用此方法。

StatefulWidget

  1. initState()

    • 當State對象被創建并關聯到StatefulWidget后立即調用。
    • 在這個方法中,你可以進行一次性初始化操作,如設置監聽器、初始化異步任務等。但請注意,此時不能直接訪問BuildContext,因為widget尚未被構建到樹中。
  2. didChangeDependencies()

    • initState()之后和首次build()之前調用。
    • 當依賴關系(如InheritedWidget)發生變化時也會調用。
    • 在這個方法中,你可以處理依賴項變更,進行依賴數據的獲取或刷新。
  3. build(BuildContext context)

    • 與無狀態組件相同,每次需要重新構建widget樹時都會調用此方法。
    • 這里根據BuildContext創建并返回widget樹。
  4. didUpdateWidget(covariant T oldWidget)

    • 當widget的配置發生變化(即StatefulWidget的createState方法返回的State對象沒有改變,但StatefulWidget本身或它的屬性發生了變化)時調用。
    • 你可以在這里更新State對象的屬性以反映新的配置。
  5. dispose()

    • 當State對象從樹中被永久移除時調用。
    • 在這里,你應該釋放任何在initState()中使用的資源,如取消監聽器或停止動畫。
  6. reassemble()

    • 在熱重載(hot reload)時調用,但在Release模式下永遠不會被調用。
    • 這在開發過程中可能很有用,例如,在熱重載時重置某些狀態。
  7. setState(VoidCallback fn)

    • 這不是一個生命周期方法,但它是State類的一個關鍵方法。當你需要更新State對象的屬性并重新構建UI時,你應該調用此方法。它接受一個回調函數,該回調函數應該修改State對象的狀態。

這些生命周期方法允許你在Flutter應用程序中更精細地控制組件的行為和生命周期。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/40101.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/40101.shtml
英文地址,請注明出處:http://en.pswp.cn/web/40101.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

centos ssh一鍵升級到9.8版本腳本

背景 前端時間暴露出ssh漏洞,需要將服務器ssh版本,目前ssh版本最新版為9.8,故在服務器測試,準備將所有服務器ssh版本升級。腳本在centos7.6上親測可用。#!/bin/bash #Author Mr zhangECHO_GREEN() {echo -e "\033[32m $1...…

昇思MindSpore學習總結九——FCN語義分割

1、語義分割 圖像語義分割(semantic segmentation)是圖像處理和機器視覺技術中關于圖像理解的重要一環,AI領域中一個重要分支,常被應用于人臉識別、物體檢測、醫學影像、衛星圖像分析、自動駕駛感知等領域。 語義分割的目的是對圖…

【楚怡杯】職業院校技能大賽 “Python程序開發”賽項樣題三

Python程序開發實訓 (時量:240分鐘) 中國XX 實訓說明 注意事項 1. 請根據提供的實訓環境,檢查所列的硬件設備、軟件清單、材料清單是否齊全,計算機設備是否能正常使用。 2. 實訓結束前,在實訓平臺提供的…

從數據到智能,英智私有大模型助力企業實現數智化發展

在數字化時代,數據已經成為企業最重要的資源。如何將這些數據轉化為實際的業務價值,是每個企業面臨的重要課題。英智利用業界領先的清洗、訓練和微調技術,對企業數據進行深度挖掘和分析,定制符合企業業務場景的私有大模型&#xf…

篩選有合并單元格的數據

我們經常會使用合并單元格,比如下面表格,因為一個部門中會有不同的員工,就會出現如下表格: 但是當按部門去篩選的時候,會發現并不是我們預期的結果,部門列有空值,每個部門只有第一行數據可以被…

虛幻引擎 快速的色度摳圖 Chroma Key 算法

快就完了 ColorTolerance_PxRange為容差,這里是0-255的輸入,也就是px單位,直接用0-1可以更快 Key為目標顏色

PySide6 實現資源的加載:深入解析與實戰案例

目錄 1. 引言 2. 加載內置資源 3. 使用自定義資源文件(.qrc) 創建.qrc文件 編譯.qrc文件 加載資源 4. 動態加載UI文件 使用Qt Designer設計UI 加載UI文件 5. 注意事項與最佳實踐 6. 結論 在開發基于PySide6的桌面應用程序時&…

什么是 DDoS 攻擊及如何防護DDOS攻擊

自進入互聯網時代,網絡安全問題就一直困擾著用戶,尤其是DDOS攻擊,一直威脅著用戶的業務安全。而高防IP被廣泛用于增強網絡防護能力。今天我們就來了解下關于DDOS攻擊,以及可以防護DDOS攻擊的高防IP該如何正確選擇使用。 一、什么是…

個人引導頁+音樂炫酷播放器(附加源碼)

個人引導頁音樂炫酷播放器 效果圖部分源碼完整源碼領取下期更新內容 效果圖 部分源碼 //網站動態標題開始 var OriginTitile document.title, titleTime; document.addEventListener("visibilitychange", function() {if (document.hidden) {document.title "…

極客時間 - 《Linux 性能優化實戰》

極客時間 - 《Linux 性能優化實戰》原文鏈接:https://time.geekbang.org/column/intro/100020901 02 | 基礎篇:到底應該怎么理解“平均負載”?在Linux系統中,當一個進程啟動時,操作系統會為該進程申請哪些資源&#x…

Python學習從0開始——Kaggle實踐可視化001

Python學習從0開始——Kaggle實踐可視化001 一、創建和加載數據集二、數據預處理1.按name檢查,處理重復值(查重)2.查看存在缺失值的列并處理(缺失值處理)2.1按行或列查看2.2無法推測的數據2.3可由其它列推測的數據 3.拆…

QT實現GIF動圖顯示(小白版,可直接copy使用)

需要你自己提前設置好動圖的位置&#xff0c;本例中存放于"/Users/PLA/PLA/PLA.gif widget.h #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QMovie> #include <QLabel>class Widget : public QWidget {Q_OBJECTpublic:explicit Wid…

mysql數據表時間字段自動存時間

時間字段自動存時間&#xff0c;不用通過插入語句存當前操作時間&#xff1a; created_at timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 創建時間,

深入分析 Android BroadcastReceiver (九)

文章目錄 深入分析 Android BroadcastReceiver (九)1. Android 廣播機制的擴展應用與高級優化1.1 廣播機制的擴展應用1.1.1 示例&#xff1a;有序廣播1.1.2 示例&#xff1a;粘性廣播1.1.3 示例&#xff1a;局部廣播 1.2 廣播機制的高級優化1.2.1 示例&#xff1a;使用 Pending…

空調計費系統是什么,你知道嗎

空調計費系統是一種通過對使用空調的時間和能源消耗進行監測和計量來進行費用計算的系統。它廣泛應用于各種場所&#xff0c;如家庭、辦公室、商場等&#xff0c;為用戶提供了方便、準確的能源使用管理和費用控制。 可實現功能 智能計費&#xff1a;中央空調分戶計費系統通過智…

SOLIDWORKS分期許可(訂閱形式),降低前期的投入成本!

SOLIDWORKS 分期許可使您能夠降低前期軟件成本&#xff0c;同時提供對 SOLIDWORKS 新版本和升級程序的即時訪問&#xff0c;以及在每個期限結束時調整產品的靈活性&#xff0c;幫助您跟上市場需求和競爭壓力的步伐。 目 錄&#xff1a; ★ 1 什么是SOLIDWORKS分期許可 ★ 2 …

gen_region_line 生成直線

gen_region_line (Operator) Name 名稱 gen_region_line — Store input lines as regions.將輸入行存儲為region。 生成直線&#xff0c;直線區域 Signature 簽名 gen_region_line( : RegionLines : BeginRow, BeginCol, EndRow, EndCol : ) Description 描述 運算符ge…

【LLM大模型】程序員為什么要學習大模型應用開發?

0 prompt engineer 就是prompt工程師它的底層透視。 1 學習大模型的重要性 底層邏輯 人工智能大潮已來&#xff0c;不加入就可能被淘汰。就好像現在職場里誰不會用PPT和excel一樣&#xff0c;基本上你見不到。你問任何一個人問他會不會用PPT&#xff0c;他都會說會用&#…

請查收!模擬電路精選書單一份(可下載)

在電子工程的廣闊天地中&#xff0c;模擬電路設計是一門藝術&#xff0c;也是一種科學。它要求設計師不僅要有深厚的理論知識&#xff0c;還要有精湛的實踐技能。隨著技術的發展&#xff0c;模擬電路設計領域不斷涌現新的理論、技術和工具&#xff0c;這使得學習和掌握模擬設計…

css使用偽元素after或者before的時候想要給after設置z-index無效

css使用偽元素after或者before的時候想要給after或者before設置一個層級關系&#xff0c;使該偽類寫入的樣式在box的下面&#xff0c;發現給box設置z-index無效&#xff0c; 需要找到父級元素&#xff0c;在父級元素上設置z-index值并且將偽類設置z-index:-1