Flutter中 Provider 的基礎用法超詳細講解(二)之ChangeNotifierProvider

目錄

前言

一、什么是ChangeNotifierProvider?

 二、ChangeNotifier的簡單用法

1.定義狀態類

2.使用ChangeNotifierProvider提供狀態

3.獲取狀態并監聽更新

1.Consumer

2.通過API方式獲取

1.Provider.of (context)

2.context.watch ()

3.context.read ()

4.各種獲取狀態的方法的區別

三、ChangeNotifierProvider高級用法

1.多Provider組合使用

2.使用context.read、watch、select

1.read用于點擊事件

2.select精細監聽

3.局部重建優化

4.狀態共享跨頁面

5.手動獲取最新狀態


前言

        上篇文章中,我們大致了解下Provider的優點和缺點,這篇博客主要介紹Provider中的四大核心Provider中的ChangeNotifierProvider。

一、什么是ChangeNotifierProvider?

        ChangeNotifierProvider 是 Provider 包中用于提供 ChangeNotifier 類型對象給子 widget 樹的組件。

        它的核心功能是:將狀態對象注入到widget樹中,供后續獲取與監聽更新。

        它的兩個職責:

        持有一個 ChangeNotifier 狀態對象

        自動管理它的生命周期(創建、釋放)

 二、ChangeNotifier的簡單用法

1.定義狀態類

        我們首先定義我們的數據模型,這個數據模型繼承自ChangeNotifier。

class Counter with ChangeNotifier {int _count = 0;int get count => _count;void increment() {_count++;notifyListeners(); // 通知 UI 更新}
}

2.使用ChangeNotifierProvider提供狀態

void main() {runApp(ChangeNotifierProvider(create: (context) => Counter(),child: const MyApp(),),);
}

3.獲取狀態并監聽更新

        ChangeNotifierProvider有兩種方式獲取狀態分別是Consumer和API方式獲取狀態。

1.Consumer

class MyHomePage extends StatelessWidget {@overrideWidget build(BuildContext context) {return Consumer<Counter>(builder: (context, counter, _) => Column(children: [Text('Count: ${counter.count}'),ElevatedButton(onPressed: counter.increment,child: Text('Increment'),),],),);}
}

2.通過API方式獲取

        除了上面的Consumer的方式獲取Widget的狀態之外,還可以通過下面的API實時獲取Widget的狀態。

1.Provider.of<T>(context)

        我們可以通過Provider.of<T>(context)獲取Widget的狀態。

import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import 'consumer.dart';class ChangeNotifierProviderDemoPage extends StatelessWidget {final String title;const ChangeNotifierProviderDemoPage({super.key, required this.title});@overrideWid

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

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

相關文章

2025電商CPS分銷與推客系統小程序開發:趨勢、架構與實戰解析

一、行業趨勢&#xff1a;CPS模式與社交電商的深度融合1.1 電商行業新趨勢根據《2025年電子商務行業發展趨勢預測報告》&#xff0c;社交電商與內容營銷已成為核心增長點。消費者行為呈現三大特征&#xff1a;消費習慣轉變&#xff1a;線上購物占比超70%&#xff0c;Z世代用戶更…

Conda環境下配置的基本命令

功能命令創建環境conda create -n myenv python3.11激活環境conda activate myenv刪除環境conda env remove -n myenv復制環境conda create -n newenv --clone myenv列出所有環境conda env list列出環境所有包conda list徹底清除某個 Conda 環境中的所有已安裝包&#xff08;但…

Ps2025

快捷鍵CShs保存CSw存儲為S選取疊加選取,A選取減去選區C回車保存路徑內容識別 SF5 ADel填充前景色CDel填充背景色A上下 上下行間距A左右 左右字間距C左鍵絲滑放大縮小CASE蓋印圖層C}上移一格CG新建組sF6羽化像素鋼筆工具打上抹點&#xff0c;按住shift水平拉調增弧度左右兩個手柄…

ceph sc 設置文件系統格式化參數

前言 默認的 sc 文件系統 inode 太少,對于小文件場景,往往會出現容量沒滿,inode 已經用盡的情況,本文說明如何設置 inode。 說明 本文使用的是 rook-ceph 部署的 ceph 作為存儲后端。 xfs 文件系統 sc 創建帶格式化參數的 xfs 文件系統的 sc allowVolumeExpansion: t…

【LY88】ubuntu下的常用操作

vscode 下載安裝包 在安裝包所處文件夾空白區域右鍵調出終端 輸入下行命令安裝 c后接tab自動補全安裝包名稱&#xff08;前提是該文件夾中僅這一個c開頭文件&#xff0c;否則得再輸點字母&#xff0c;保證其可唯一索引到&#xff09; sudo dpkg -i ctab安裝完畢后輸入code&…

web應用從服務器主動推動數據到客戶端的方式

html5 websocket 全雙工交互 全雙工通信&#xff1a;建立持久連接&#xff0c;服務端和客戶端可隨時互相發送消息 低延遲&#xff1a;適合實時應用&#xff08;聊天、游戲、股票行情等&#xff09; socket協議是與HTTP協議平級的&#xff0c;websocket協議是建立在TCP協議之上的…

基于Spring Boot實現中醫醫學處方管理實踐

基于Spring Boot實現中醫醫學處方管理 以下是基于Spring Boot實現中醫醫學處方管理的相關示例和資源整理,涵蓋基礎架構、功能模塊及實際應用案例: 基礎項目結構 Spring Boot中醫處方系統通常采用MVC分層設計: 實體類:定義處方、藥材、患者等JPA實體 @Entity public clas…

從“人工核驗”到“智能鑒防”:護照鑒偽設備的科技革命

“一本偽造護照的查獲成本從72小時降至3秒&#xff0c;背后是光學傳感、量子加密與多模態AI的十年協同進化。”2025年全球邊檢口岸查獲偽假護照近500份&#xff0c;其中芯片偽造占比首超40%。當造假技術逼近分子級仿制&#xff0c;傳統肉眼鑒別徹底失效&#xff0c;多光譜成像、…

無人機飛控系統3D (C++)實踐

大疆無人機飛控系統3D模型開發 大疆無人機飛控系統3D模型開發(C++) 核心架構設計 大疆無人機的飛控系統通常采用分層架構,分為硬件抽象層(HAL)、中間件層和應用層。HAL負責與傳感器/執行器直接交互,中間件處理數據融合和通信協議,應用層實現核心控制算法。 典型代碼結…

ES6中import與export的用法詳解

目錄 一、ES6模塊化的核心概念 1. 模塊化的基本規則 二、export的用法 1. 命名導出&#xff08;Named Export&#xff09; 示例&#xff1a; 2. 默認導出&#xff08;Default Export&#xff09; 示例&#xff1a; 默認導出函數或類&#xff1a; 3. 導出語句的統一聲明…

硬核技術協同:x86 生態、機密計算與云原生等技術如何為產業數字化轉型筑底賦能

在產業數字化轉型的浪潮中&#xff0c;x86 生態構建、機密計算與 AI 融合、高性能網卡突破、云原生 OS 實踐、國產數據庫優化等技術領域的突破&#xff0c;正成為支撐數字化基礎設施升級與業務創新的核心引擎。以下從技術深度與產業實踐角度&#xff0c;系統性解析各領域的最新…

Java項目:基于SSM框架實現的網絡財務管理系統【ssm+B/S架構+源碼+數據庫+畢業論文+遠程部署】

摘 要 現代經濟快節奏發展以及不斷完善升級的信息化技術&#xff0c;讓傳統數據信息的管理升級為軟件存儲&#xff0c;歸納&#xff0c;集中處理數據信息的管理方式。本網絡財務管理系統就是在這樣的大環境下誕生&#xff0c;其可以幫助管理者在短時間內處理完畢龐大的數據信息…

1.5.Vue v-for 和 指令修飾符

vue v-for當你使用 v-for 指令來渲染列表時&#xff0c;為每個元素提供一個唯一的 key 屬性是非常重要的。key 是用來給 Vue 一個提示&#xff0c;以便它能夠追蹤每個節點的身份&#xff0c;從而更高效地更新虛擬 DOM。key 的作用唯一標識&#xff1a;key 應該是每項數據的唯一…

(RedmiBook)上禁用觸摸板或自帶鍵盤

在紅米筆記本&#xff08;RedmiBook&#xff09;上禁用觸摸板或自帶鍵盤&#xff0c;可以通過以下幾種方法實現&#xff1a; 方法一&#xff1a;通過設備管理器禁用&#xff08;Windows 系統&#xff09; 禁用觸摸板 打開設備管理器 按 Win X → 選擇 “設備管理器”或 Win …

15 - 多模態大語言模型 — 圖文 “牽線” 系統 “成長記”:借 CLIP 練本領,從圖像與文字里精準 “搭鵲橋” 的全過程 (呆瓜版 - 2 號)

目錄 1、基礎&#xff1a;它到底是個啥&#xff1f; 1. 1、一句話理解核心 1.2、 為啥厲害&#xff1f; 1.3、怎么發展來的&#xff1f; 2、架構&#xff1a;它的 “身體構造” 是啥樣的&#xff1f; 2.1、視覺語言模型架構&#xff1a;讓 AI “看懂” 世界的核心系統 2…

Day 4-1: 機器學習算法全面總結

Day 4-1: 機器學習算法全面總結 ?? 學習目標 通過前三天的學習,我們已經掌握了機器學習的基礎知識和經典算法。今天我們來做一個全面總結,為進入深度學習階段做好準備。 ?? 已掌握的核心算法總結 1. 監督學習算法 1.1 回歸算法 算法 核心思想 適用場景 優缺點 線性回…

雨云深度體驗:從安利到教程再到全面評測

零、簡介在云服務市場競爭日益激烈的當下&#xff0c;各類云服務提供商如雨后春筍般涌現。然而&#xff0c;雨云卻憑借其獨特的優勢&#xff0c;在這片紅海之中逐漸嶄露頭角&#xff0c;吸引了眾多個人開發者與企業用戶的目光。接下來&#xff0c;就讓我們全方位、深層次地從安…

luoguP13511 [KOI P13511 [KOI 2025 #1] 等腰直角三角形

P13511 [KOI 2025 #1] 等腰直角三角形 - 洛谷 題目重現 題目描述 在二維平面上有 N 個不同的點。對于每個 1≤i≤N 的 i,第 i 個點的坐標為 (xi?,yi?)。 等腰三角形是指三條邊中有兩條邊長度相等的三角形。直角三角形是指一個內角為直角 (90°) 的三角形。直角三角形的斜…

Qt Quick 動畫與過渡效果

Qt Quick 提供了強大而靈活的動畫系統&#xff0c;使開發者能夠輕松創建流暢、引人入勝的用戶界面。從簡單的屬性變化到復雜的多元素協同動畫&#xff0c;Qt Quick 提供了多種實現方式。本文將深入解析 Qt Quick 動畫與過渡效果的核心技術和最佳實踐。 一、基礎動畫類型 1. 數字…

LlamaIndex 和 Elasticsearch Rerankers:無與倫比的簡潔

作者&#xff1a;來自 Elastic Jeffrey Rengifo 了解如何從 LlamaIndex RankGPT reranker 遷移到 Elastic 內置的 semantic reranker。 Elasticsearch 擁有與行業領先的 Gen AI 工具和服務商的原生集成。查看我們的網絡研討會&#xff0c;了解如何突破 RAG 基礎&#xff0c;或使…