日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【Flutter】Flutter 页面生命周期 ( 初始化期 | createState | initState | 更新期 | build | 销毁期 | dispose)

發布時間:2025/6/17 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【Flutter】Flutter 页面生命周期 ( 初始化期 | createState | initState | 更新期 | build | 销毁期 | dispose) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

  • 一、Flutter 頁面生命周期
    • 1、StatelessWidget 組件生命周期函數
    • 2、StatefulWidget 組件生命周期函數
  • 二、StatefulWidget 組件生命周期
    • 1、createState
    • 2、initState
    • 3、didChangeDependencies
    • 4、build
    • 5、didUpdateWidget
    • 6、deactivate
    • 7、dispose
  • 三、完整代碼示例
  • 四、相關資源





一、Flutter 頁面生命周期



Flutter 頁面生命周期就是 Flutter 頁面組件 Widget 的生命周期 ;

頁面的組件就是 StatefulWidget 組件 和 StatelessWidget 組件 ;



1、StatelessWidget 組件生命周期函數


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

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

2、StatefulWidget 組件生命周期函數


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

① 初始化期 : createState , initState ;

② 更新期 : didChangeDependencies , build , didUpdateWidget ;

③ 銷毀期 : deactivate , dispose ;





二、StatefulWidget 組件生命周期





1、createState


createState 函數 :

  • 所處時期 : 初始化期的生命周期函數
  • 調用時機 : 創建 StatefulWidget 之后調用的第一個方法 ;
  • 抽象方法 : 該方法是抽象方法 , 必須覆蓋重寫該方法 ;
/// 1. 初始化期的生命周期函數/// 創建 StatefulWidget 之后調用的第一個方法 ,/// 該方法是抽象方法 , 必須覆蓋@override_WidgetLiftCyclePageState createState() => _WidgetLiftCyclePageState();

2、initState


initState 函數 :

  • 所處時期 : 初始化期的生命周期函數
  • 調用時機 : 該方法是創建 Widget 組件時除構造方法之外的第一個方法 ,
  • 對應方法 : 對應 Android 中的 onCreate 方法 ; 對應 iOS 中的 viewDidLoad 方法 ;
  • 常用用法 : 在該方法中執行一些初始化操作 ;
/// 2. 初始化期的生命周期函數/// 該方法是創建 Widget 組件時除構造方法之外的第一個方法/// 該方法對應 Android 中的 onCreate 方法/// 對應 iOS 中的 viewDidLoad 方法/// 常用用法 : 在該方法中執行一些初始化操作@overridevoid initState() {print("initState");super.initState();}

3、didChangeDependencies


didChangeDependencies 函數 :

  • 所處時期 : 更新期的生命周期函數 ;
  • 調用時機 : ① 創建 Widget 組件時 , 調用完 initState 方法后 , 調用該方法 ; ② InheritedWidget 相關 ( 暫不涉及 ) ;
/// 3. 更新期的生命周期函數/// 方法調用時機 :/// ① 創建 Widget 組件時 , 調用完 initState 方法后 , 調用該方法/// ② InheritedWidget 相關 ( 暫不涉及 )@overridevoid didChangeDependencies() {/// 該方法在開始處必須調用父類的方法super.didChangeDependencies();print("didChangeDependencies");}

4、build


build 函數 :

  • 所處時期 : 更新期的生命周期函數 ;
  • 調用時機 : ① 調用完 didChangeDependencies 方法后調用該方法 ; ② 調用 setState 方法之后 , 該方法也會被調用 ;
  • 方法作用 : 頁面每次渲染時都會調用該方法 ;
/// 4. 更新期的生命周期函數/// 方法調用時機 :/// ① 調用完 didChangeDependencies 方法后調用該方法/// ② 調用 setState 方法之后 , 該方法也會被調用 ;/// 頁面每次渲染時都會調用該方法@overrideWidget build(BuildContext context) {print("build");return Scaffold(appBar: AppBar(// 標題title: Text("StatefulWidget 頁面生命周期"),// 回退按鈕leading: BackButton(),),body: Center(child: Column(children: <Widget>[RaisedButton(// 點擊事件onPressed: (){// 回調更新期 生命周期函數setState(() {});},child: Text("調用 setState() 方法"),),],),),);}

5、didUpdateWidget


didUpdateWidget 函數 :

  • 所處時期 : 更新期的生命周期函數 ;
  • 調用時機 : 該生命周期方法不經常調用 , 只有在父容器組件重繪時才調用該方法 ;
  • 方法機制 : 傳入的 oldWidget 參數是舊的組件信息 , 將當前的 Widget 與舊的 Widget 進行對比 , 如果不相等 , 便執行額外操作 ;
/// 5. 更新期的生命周期函數/// 方法調用時機 : 該生命周期方法不經常調用 , 只有在父容器組件重繪時才調用該方法/// 方法機制 : 傳入的 oldWidget 參數是舊的組件信息 ,/// 將當前的 Widget 與舊的 Widget 進行對比 , 如果不相等 , 便執行額外操作/// 如 : 組件的屬性不相等 , 字段的值不相等@overridevoid didUpdateWidget(WidgetLiftCyclePage oldWidget) {super.didUpdateWidget(oldWidget);print("didUpdateWidget");}

6、deactivate


deactivate 函數 :

  • 所處時期 : 銷毀期的生命周期函數 ;
  • 調用時機 : 該生命周期方法不經常調用 , 只有在組件被移除時才調用 ;
/// 6 . 銷毀期的生命周期函數/// 方法調用時機 : 該生命周期方法不經常調用 , 只有在組件被移除時才調用/// 該方法在 dispose 方法之前被調用@overridevoid deactivate() {super.deactivate();print("deactivate");}

7、dispose


dispose 函數 :

  • 所處時期 : 銷毀期的生命周期函數 ;
  • 調用時機 : 組件被銷毀時調用 , 要在該方法中進行資源的釋放與銷毀操作 ;
/// 7 . 銷毀期的生命周期函數/// 方法調用時機 : 組件被銷毀時調用 , 要在該方法中進行資源的釋放與銷毀操作@overridevoid dispose() {super.dispose();print("dispose");}



三、完整代碼示例



完整代碼示例 :

import 'package:flutter/material.dart';class WidgetLiftCyclePage extends StatefulWidget {/// 1. 初始化期的生命周期函數/// 創建 StatefulWidget 之后調用的第一個方法 ,/// 該方法是抽象方法 , 必須覆蓋@override_WidgetLiftCyclePageState createState() => _WidgetLiftCyclePageState(); }class _WidgetLiftCyclePageState extends State<WidgetLiftCyclePage> {/// 2. 初始化期的生命周期函數/// 該方法是創建 Widget 組件時除構造方法之外的第一個方法/// 該方法對應 Android 中的 onCreate 方法/// 對應 iOS 中的 viewDidLoad 方法/// 常用用法 : 在該方法中執行一些初始化操作@overridevoid initState() {print("initState");super.initState();}/// 3. 更新期的生命周期函數/// 方法調用時機 :/// ① 創建 Widget 組件時 , 調用完 initState 方法后 , 調用該方法/// ② InheritedWidget 相關 ( 暫不涉及 )@overridevoid didChangeDependencies() {/// 該方法在開始處必須調用父類的方法super.didChangeDependencies();print("didChangeDependencies");}/// 4. 更新期的生命周期函數/// 方法調用時機 :/// ① 調用完 didChangeDependencies 方法后調用該方法/// ② 調用 setState 方法之后 , 該方法也會被調用 ;/// 頁面每次渲染時都會調用該方法@overrideWidget build(BuildContext context) {print("build");return Scaffold(appBar: AppBar(// 標題title: Text("StatefulWidget 頁面生命周期"),// 回退按鈕leading: BackButton(),),body: Center(child: Column(children: <Widget>[RaisedButton(// 點擊事件onPressed: (){// 回調更新期 生命周期函數setState(() {});},child: Text("調用 setState() 方法"),),],),),);}/// 5. 更新期的生命周期函數/// 方法調用時機 : 該生命周期方法不經常調用 , 只有在父容器組件重繪時才調用該方法/// 方法機制 : 傳入的 oldWidget 參數是舊的組件信息 ,/// 將當前的 Widget 與舊的 Widget 進行對比 , 如果不相等 , 便執行額外操作/// 如 : 組件的屬性不相等 , 字段的值不相等@overridevoid didUpdateWidget(WidgetLiftCyclePage oldWidget) {super.didUpdateWidget(oldWidget);print("didUpdateWidget");}/// 6 . 銷毀期的生命周期函數/// 方法調用時機 : 該生命周期方法不經常調用 , 只有在組件被移除時才調用/// 該方法在 dispose 方法之前被調用@overridevoid deactivate() {super.deactivate();print("deactivate");}/// 7 . 銷毀期的生命周期函數/// 方法調用時機 : 組件被銷毀時調用 , 要在該方法中進行資源的釋放與銷毀操作@overridevoid dispose() {super.dispose();print("dispose");}}

運行效果 :

打印日志 : 進入界面 , 點擊 333 下按鈕 , 然后退出界面 ;

  • 進入界面 : 先調用 initState 方法 , 然后調用 didChangeDependencies 方法 , 最后調用 build 方法 ;
I/flutter (21393): initState I/flutter (21393): didChangeDependencies I/flutter (21393): build
  • 點擊按鈕 : 每次點擊按鈕都打印一次 build , 總共調用了 333 次 build 方法 ;
I/flutter (21393): build I/flutter (21393): build I/flutter (21393): build
  • 退出界面 : 先調用 deactivate 方法 , 最后調用 dispose 方法 ;
I/flutter (21393): deactivate I/flutter (21393): dispose
  • 完整日志 :
Performing hot reload... Syncing files to device Pixel 2... Reloaded 2 of 489 libraries in 510ms. I/flutter (21393): initState I/flutter (21393): didChangeDependencies I/flutter (21393): build I/flutter (21393): build I/flutter (21393): build I/flutter (21393): build I/flutter (21393): deactivate I/flutter (21393): dispose



四、相關資源



參考資料 :

  • Flutter 官網 : https://flutter.dev/
  • Flutter 插件下載地址 : https://pub.dev/packages
  • Flutter 開發文檔 : https://flutter.cn/docs ( 強烈推薦 )
  • 官方 GitHub 地址 : https://github.com/flutter
  • Flutter 中文社區 : https://flutter.cn/
  • Flutter 實用教程 : https://flutter.cn/docs/cookbook
  • Flutter CodeLab : https://codelabs.flutter-io.cn/
  • Dart 中文文檔 : https://dart.cn/
  • Dart 開發者官網 : https://api.dart.dev/
  • Flutter 中文網 ( 非官方 , 翻譯的很好 ) : https://flutterchina.club/ , http://flutter.axuer.com/docs/
  • Flutter 相關問題 : https://flutterchina.club/faq/ ( 入門階段推薦看一遍 )

博客源碼下載 :

  • GitHub 地址 : https://github.com/han1202012/flutter_cmd ( 隨博客進度一直更新 , 有可能沒有本博客的源碼 )

  • 博客源碼快照 : https://download.csdn.net/download/han1202012/15547438 ( 本篇博客的源碼快照 , 可以找到本博客的源碼 )

總結

以上是生活随笔為你收集整理的【Flutter】Flutter 页面生命周期 ( 初始化期 | createState | initState | 更新期 | build | 销毁期 | dispose)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 秋霞av一区二区三区 | 日韩三级电影网址 | 三级福利视频 | 日本天天操 | 亚洲免费福利视频 | 99久久婷婷国产一区二区三区 | 日韩一区二区三区四区在线 | 嫩草影院一区二区三区 | 午夜激情国产 | 丰满孕妇性春猛交xx大陆 | 免费成人深夜夜国外 | 色网站在线播放 | 日本午夜激情 | 色诱av手机版 | 日韩亚洲精品视频 | 成人淫片| 男女日批在线观看 | 国产69精品久久久久久 | 99re6在线| 亚洲精品高潮久久久久久久 | 福利精品在线 | 国产爆操视频 | 午夜啪啪网站 | 国产99精品视频 | 蜜臀av夜夜澡人人爽人人 | 在线观看国产欧美 | 国产精品一区二区免费 | 欧美一二 | 色欧美视频 | 日韩精品系列 | 久久午夜鲁丝片午夜精品 | 欧美性xxxxxxxxx | 久久中文一区 | 亚州久久久 | 国产一区二区三区免费观看 | 欧美骚视频 | 久久久蜜桃一区二区 | 新天堂av| 午夜不卡av | 免费日本特黄 | 欧美大尺度床戏做爰 | 香蕉视频官方网站 | 综合色导航 | 久草中文在线视频 | 午夜影院0606| 亚洲综合无码一区二区 | 中文字幕在线观看网 | 欧美日韩影院 | 得得的爱在线视频 | 日韩福利电影在线观看 | 人妻体体内射精一区二区 | 激情五月婷婷色 | 污视频大全 | 亚洲一区二区中文 | www.97av.com| 精品国产乱码久久久久久1区二区 | 国产乱人伦 | 四虎www| 99热免费在线观看 | 亚洲网站在线观看 | 亚洲AV无码久久精品国产一区 | 免费看片亚洲 | 精品久久久久久久久久久久久久久久 | 亚洲女同一区 | 国产一区二区视频免费在线观看 | 成人久久毛片 | 久久国内视频 | 色哟哟精品一区 | 91在线无精精品一区二区 | 找av导航 | 毛片aaaaa| 天天做天天爽 | 午夜蜜桃视频 | 日韩h视频 | 九九热精品在线观看 | 爱啪啪导航 | 992tv在线影院 | 成人激情站 | 99热激情 | 小萝莉末成年一区二区 | 亚洲欧美中文日韩在线 | 在线观看岛国av | 91av久久 | 情侣黄网站免费看 | 在线不卡国产 | 亚洲污视频 | 狠色综合7777夜色撩人 | 96在线视频 | 欧美高大丰满少妇xxxx | 神马久久网 | 日韩精品电影一区 | 又黄又爽又色视频 | 国产地址一 | av激情影院| 欧美成在线观看 | 噼里啪啦动漫高清在线观看 | 久久夜色精品国产噜噜亚洲av | 狠狠看 | 操夜夜操|