Flutter基礎(前端教程①③-單例)

現實類比:公司打印機

假設你們公司有一臺共享打印機:

  1. 非單例(重復創建)

    • 每個員工都自己買一臺打印機放在工位上
    • 結果:浪費錢,占空間,難維護
  2. 單例(唯一實例)

    • 全公司只買一臺打印機,放在公共區域
    • 所有人都用這臺打印機
    • 結果:省錢,省空間,統一管理

代碼中的單例

在 Flutter 中,如果不使用單例,每次調用?new Calculator()?都會創建一個新的計算器:

// 非單例:創建多個計算器實例
final calc1 = new Calculator();
final calc2 = new Calculator();print(calc1 == calc2); // false,兩個不同的實例

而使用?Get.put()?注冊的對象默認是單例,無論獲取多少次都是同一個實例:

// 單例:只創建一個計算器實例
Get.put(Calculator());final calc1 = Get.find<Calculator>();
final calc2 = Get.find<Calculator>();print(calc1 == calc2); // true,同一個實例

為什么需要單例?

  1. 節省資源
    比如網絡請求控制器、數據庫連接、配置信息等,創建多個實例會浪費內存。

  2. 數據一致性
    所有地方都使用同一個實例,保證數據狀態統一。
    (比如用戶登錄狀態、購物車數據)

  3. 避免沖突
    某些類只能有一個實例(如打印機、文件系統),否則會引發沖突。

1.?Get.put()

功能:把一個對象「注冊」到 GetX 的全局容器中,讓它在整個應用里都能被訪問。
類比:把工具放進「公共工具箱」,其他人隨時可以取。
特點:默認創建單例(全局唯一實例)。

// 創建并注冊一個控制器(放入工具箱)
Get.put(PostController());// 在其他地方獲取已注冊的控制器
final controller = Get.find<PostController>();

2.?Get.find()

功能:從 GetX 的全局容器中「獲取」已注冊的對象。
類比:從「公共工具箱」里取出需要的工具。
注意:必須先?Get.put()?注冊,才能?Get.find()?獲取。

// 獲取已注冊的控制器(從工具箱取工具)
final controller = Get.find<PostController>();// 使用控制器的方法
controller.fetchPosts();

3.?Get.snackbar()

功能:顯示一個頂部或底部的消息提示(類似 Toast 或 Snackbar)。
類比:在屏幕上彈一個「臨時通知」。
特點:支持自定義樣式、持續時間、點擊事件等。

// 顯示一個簡單的消息提示
Get.snackbar('標題',          // 標題'這是消息內容',  // 內容duration: Duration(seconds: 3),  // 顯示3秒snackPosition: SnackPosition.BOTTOM,  // 顯示在底部
);

完整示例

// 1. 注冊控制器(通常在頁面初始化時)
Get.put(PostController());// 2. 獲取控制器并調用方法
final controller = Get.find<PostController>();
controller.fetchPosts();    //PostController是class fetchPosts是方法// 3. 在合適的時機顯示消息提示(如點擊按鈕后)
Get.snackbar('加載完成','已成功獲取 ${controller.posts.length} 條數據',snackPosition: SnackPosition.TOP,
);

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

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

相關文章

力扣刷題 -- 965.單值二叉樹

題目示例&#xff1a; 思路分析代碼實現 bool isUnivalTree(struct TreeNode* root) {if(rootNULL){return true;}if(root->left && root->val ! root->left->val){return false;}if(root->right && root->val ! root->right->val){re…

uni-api交互反饋組件(showToast)的用法

歡迎來到我的UniApp技術專欄&#xff01;&#x1f389; 在這里&#xff0c;我將與大家分享關于UniApp開發的實用技巧、最佳實踐和項目經驗。 專欄特色&#xff1a; &#x1f4f1; 跨平臺開發一站式解決方案 &#x1f680; 從入門到精通的完整學習路徑 &#x1f4a1; 實戰項目經…

借助它,在Web3投資賽道搶占先機

隨著互聯網技術的飛速發展&#xff0c;Web3的概念逐漸成為科技圈和投資界的熱門話題。Web3代表著下一代互聯網的發展方向&#xff0c;它強調去中心化、用戶主權和數據隱私保護。在這一新興領域&#xff0c;如何借助Web3技術搶占投資先機&#xff0c;成為許多投資者關注的焦點。…

驗證大語言模型不會算數但可以編寫算數的程序

摘要&#xff1a;本文通過幾個實例測試了大語言模型在數學計算、排序、統計等方面的能力。結果顯示&#xff0c;對于簡單字符統計、排序等任務&#xff0c;大模型能正確生成實現代碼&#xff0c;但當數據區分度降低時容易出錯。在計算學生分數排名任務中&#xff0c;大模型生成…

概率論與數理統計(八)

參數估計 通過取樣本&#xff0c;并用樣本構造函數&#xff0c;達成估計分布函數參數的目的 矩估計法 本質&#xff1a;用樣本的各階矩代替總體的各階矩&#xff0c;即取&#xff1a; E(X)X ̄1n∑iXiE(X2)1n∑iXi2E(X)\overline{X}\dfrac{1}{n}\sum_i X_i\\ E(X^2)\dfrac{1}…

服務器后臺崩潰的原因

當我們雙十一活動零點拼命刷新卻卡在支付完頁面&#xff0c;游戲頁面等不進去&#xff0c;公司系統癱瘓全體員工干瞪眼&#xff0c;服務器崩潰絕對是數字時代中的酷刑&#xff01;那服務器為什么會說崩就崩&#xff0c;用戶對于這種情況該如何進行避雷呢&#xff1f;服務器主要…

線程池與ThreadPoolExecutor源碼解析(上)

一、線程池線程池&#xff08;ThreadPool&#xff09;是一種線程復用的機制。它維護著若干個線程&#xff0c;任務來了就復用這些線程去執行&#xff0c;任務做完線程不會銷毀&#xff0c;而是回到池中等待下一個任務。為什么要用線程池&#xff1f;降低資源消耗&#xff1a;避…

Linux內核IP分片重組機制剖析:高效與安全的藝術

在IP網絡通信中,當數據包超過MTU限制時,路由器會將其拆分為多個分片。這些分片到達目標主機后,內核必須高效、安全地重組原始數據包。Linux內核的net/ipv4/inet_fragment.c實現了一套精妙的分片管理框架,完美平衡了性能和安全性需求。本文將深入剖析其設計哲學與關鍵技術。…

相機模型和對極幾何

一、相機模型 1.針孔相機模型-外參矩陣 1.世界坐標系到相機坐標系 世界坐標系&#xff1a;可以定義空間中任意一個位置&#xff0c;原點位置三個坐標軸方向坐標系姿態&#xff08;X,Y,Z&#xff09;相機坐標系&#xff1a;定義在相機上&#xff0c;原點是相機中心&#xff0c;z…

Git 常用命令與操作步驟

以下是 Git 常用命令與操作步驟 的整理&#xff0c;涵蓋日常開發中最核心的場景&#xff0c;適合快速查閱和上手&#xff1a;1. 初始化與克隆倉庫操作命令本地初始化倉庫git init克隆遠程倉庫git clone <倉庫URL> &#xff08;如 git clone https://gitlab.com/user/repo…

Leetcode-.283移動零

class Solution:def moveZeroes(self, nums: List[int]) -> None:"""Do not return anything, modify nums in-place instead."""pos0for i in range(len(nums)):if nums[i]!0:nums[pos],nums[i]nums[i],nums[pos]pos1本題運用雙指針來寫&…

在React中做過哪些性能優化?

1. 使用 React.memo 進行組件優化 問題:當父組件重新渲染時,子組件也會重新渲染,即使它的 props 沒有變化。 解決方案:使用 React.memo 包裹子組件,讓其只在 props 變化時才重新渲染。 const MyComponent = React.memo((props) => {// 子組件代碼 }); 2. 使用 useCa…

安裝docker可視化工具 Portainer中文版(ubuntu上演示,所有docker通用) 支持控制各種容器,容器操作簡單化 降低容器門檻

以下有免費的4090云主機提供ubuntu22.04系統的其他入門實踐操作 地址&#xff1a;星宇科技 | GPU服務器 高性能云主機 云服務器-登錄 相關兌換碼星宇社區---4090算力卡免費體驗、共享開發社區-CSDN博客 兌換碼要是過期了&#xff0c;可以私信我獲取最新兌換碼&#xff01;&a…

ansible批量部署zabbix客戶端

?ansible編寫劇本步驟 1??創建roles目錄結構2??在group_vars/all/main.yml中定義變量列表3??在tasks目錄下編寫tasks任務4??在files目錄下準備部署文件5??在templates目錄下創建j2模板文件6??在handlers目錄下編寫handlers7??在roles目錄下編寫主playbook8??運…

螞蟻數科AI數據產業基地正式投產,攜手蘇州推進AI產業落地

近日&#xff0c;螞蟻數科AI數據產業基地在太倉智匯谷科技創新園正式投產。該基地作為蘇州市首個AI數據產業基地&#xff0c;旨在通過跨行業人才與前沿技術&#xff0c;為長三角制造業、金融、醫療等領域的大模型落地提供場景化、高質量的訓練數據支撐。數據被視為AI學習的核心…

計算機的網絡體系及協議模型介紹

目錄 1、網絡協議介紹 1.1、定義 1.2、基本作用 1.3、協議的主要內容 2、網絡協議分層 2.1、協議分層原因 2.2、網絡協議分層的缺點 2.3、OSI協議和TCP/IP協議的聯系 3、TCP/IP 協議族 3.1、定義介紹 3.2、組成 1、應用層 2、運輸層 3、網絡層 3.3、底層流程 4、…

密碼管理安全防御

密碼管理是信息安全的核心環節,其目標是通過規范密碼的生成、存儲、傳輸、驗證和生命周期管理,防止未授權訪問,保護用戶賬號和系統資源的安全。以下從核心原則、技術實踐、常見問題及解決方案等方面詳細說明: 一、密碼管理的核心原則 密碼管理需遵循“安全性”與“可用性…

Java異步日志系統性能優化實踐指南:基于Log4j2異步Appender與Disruptor

Java異步日志系統性能優化實踐指南&#xff1a;基于Log4j2異步Appender與Disruptor 一、技術背景與應用場景 在高并發的后端應用中&#xff0c;日志記錄往往成為性能瓶頸之一。同步寫日志會阻塞業務線程&#xff0c;導致響應延遲&#xff1b;而簡單的異步隊列實現又可能出現積壓…

Mybatis07-緩存

一、緩存機制的原理計算機每次從mysql中執行sql語句&#xff0c;都是內存與硬盤的通信&#xff0c;對計算機來說&#xff0c;影響效率。因此使用緩存機制。1-1、MyBatis 的緩存機制&#xff1a;執行 DQL&#xff08;select 語句&#xff09;的時候&#xff0c;將查詢結果放到緩…

【機器學習深度學習】LoRA 與 QLoRA:大模型高效微調的進階指南

目錄 前言 一、LoRA&#xff1a;低秩微調的經典之作 二、QLoRA&#xff1a;效率與精度的升級版 三、LoRA vs QLoRA&#xff1a;如何選擇&#xff1f; 3.1 性能維度對比 3.2 根據「顯卡資源」選擇 3.3 根據「任務類型與目標」選擇 3.4 根據「模型規模」選擇 3.5 根據…