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

為什么不要在?Flutter?中使用全局變量

 更新時間:2022年08月24日 08:23:27   作者:前端修羅場  
這篇文章主要介紹了為什么不要在Flutter中使用全局變量,全局變量是公共變量,可以被Flutter程序中的每個方法和對象訪問,全局變量是局部變量的替代品,它們在方法中創(chuàng)建并在該方法中訪問

前言

全局變量似乎是很棒的 Flutter 程序組件,因為它們被聲明一次并且可以被程序中的每個函數訪問。 但是,這些變量的成本比你想象的要高,主要是因為:

  • 如果刪除一個全局變量,則必須搜索整個程序并重構每個有權訪問已刪除全局變量的函數
  • 它們很難測試,因為你必須在測試用例之間重置它們
  • 很難跟蹤更改,因為每個函數都可以修改全局變量

以上所有原因都說明了為什么在 Flutter 中永遠不應該使用全局變量。 在本文中,我們將詳細了解全局變量的缺點,并學習如何以更有效的方式管理狀態(tài)。

Flutter 中的全局變量是什么?

全局變量是公共變量,可以被 Flutter 程序中的每個方法和對象訪問。

全局變量是局部變量的替代品,它們在方法中創(chuàng)建并在該方法中訪問。

局部變量和全局變量之間的區(qū)別在于,局部變量不能被同一程序中的其他方法訪問——因此,與全局變量相比,局部變量的作用域是有限的。

Flutter 中使用全局變量的缺點

在 Flutter 中使用全局變量一直受到質疑和批評,通常被認為是不好的做法。 以下是使用全局變量的缺點:

1. 復雜的代碼維護過程

更改或刪除一個全局變量會觸發(fā)一系列事件,因為使用全局變量的小部件和方法將受到影響。

如果要更改全局變量,則必須分析訪問全局變量的每個小部件將如何受到影響并進行特定且必要的更改。

如果刪除一個全局變量,則必須搜索整個程序并重構每個有權訪問已刪除全局變量的函數。

2. 全局變量使單元測試變得痛苦

如果你更改了一個具有全局變量的模塊,那么你將不得不為下一次測試重置它。

很難理解使用全局變量的遺留代碼,而理解程序流程是如何工作的更是難上加難。 很難有效地測試你不理解的代碼,調試也很困難,因為你不知道是誰改變了全局變量。

3. 全局變量導致“面條”代碼

由于程序中的每個函數都可以修改全局變量,因此很難跟蹤更改。 如果你正在構建一個大型應用程序,在 Flutter 中使用全局變量的情況會升級。 即使你正在構建小型 Flutter 應用程序,全局變量也會導致災難。

4. 全局變量無法封裝

全局變量使得無法實現封裝,這是一種將代碼包裝到單個單元中的 OOP 概念。 封裝使得代碼的維護變得安全和容易。 如果你想有效地使用封裝,你必須禁止全局變量。

由于全局變量創(chuàng)建了“面條”代碼,因此需要大量的規(guī)范來約束它們。 但是,有些開發(fā)人員會使用全局變量,因為他們在一個小團隊中,并且在某些情況下不利于更改。

但是,無論應用程序的大小如何,當需要維護代碼時,全局變量都會帶來挑戰(zhàn)。 如果有必要使用全局變量,至少使它們不可變。

在下一部分中,你將學習狀態(tài)管理庫和包,它們提供了以更好的方式管理變量狀態(tài)的更好方法,而不會影響維護過程。

如何以更好的方式管理狀態(tài)

Flutter 是一個跨平臺的動態(tài)框架,用于收集和處理來自用戶的數據。

從開關到單選按鈕,必須有效地管理數據狀態(tài)。 但是,全局變量會增加應用程序數據流的復雜性。 全局變量使數據很容易發(fā)生變異,這可能會導致處理從用戶那里收集的數據時出現混亂。

provider 等狀態(tài)管理包可用于緩解全局變量帶來的問題。 以下是可用于管理狀態(tài)的狀態(tài)包管理器和庫的列表:

1. Provider 狀態(tài)管理包

Provider 狀態(tài)管理器包被廣泛用于收集小部件狀態(tài)數據并在狀態(tài)更改時更新小部件。

使用提供程序時,只有受影響的小部件會在數據發(fā)生突變時被更新。 與隨處變化的全局變量相比,Provider 降低了復雜性。 Provider 從小部件收集數據并監(jiān)聽小部件周圍發(fā)生的數據變化。

該包將應用程序狀態(tài)與 UI 分離,Provider 促進應用程序維護和測試。

使用以下代碼片段添加和使用 Provider 包插件:

dependencies:
  flutter:
    sdk: flutter

  provider: ^3.1.0

Provider 程序包還允許你與多個類共享小部件狀態(tài):

void main() {
  runApp(
    MultiProvider(
      providers: [
        ChangeNotifierProvider(create: (context) => CartModel()),
        Provider(create: (context) => SomeOtherClass()),
      ],
      child: const MyApp(),
    ),
  );
}

2. GetX

GetX 是一個輕量級的 Flutter 庫,它提高了可擴展性,因為它允許你解耦視圖、依賴注入、表示層和依賴注入。

它提供以下功能:

  • 狀態(tài)管理
  • 依賴注入
  • 導航
  • 路由管理

如果你正在尋找一個節(jié)省資源且消耗最少的庫,GetX 是你的最佳選擇。

要在 Flutter 應用程序啟動中開始使用 GetX,請將 get 添加到你的 pubspec.yaml 文件中:

dependencies:
  get:

接下來,導入使用 GetX 庫函數和組件時需要的 get 文件:

import 'package:get/get.dart';

3. Riverpod

Riverpod 類似于 `provider——唯一的區(qū)別是它以單向方式分發(fā)數據。

此狀態(tài)管理器確保你的代碼可測試且易于閱讀,因為它消除了用于組合對象的嵌套。 特殊功能是它在編譯過程中檢測錯誤。 這將節(jié)省你的時間,因為你將在運行時將缺陷添加到你的應用程序之前修復錯誤。

4. Redux

Redux 是一個庫,可幫助你有效地管理小部件的數據狀態(tài)。 Redux 是一種以單向方式跨小部件執(zhí)行狀態(tài)數據分布的架構。 該庫很棒,因為它消除了狀態(tài)重復,你可以測試狀態(tài)結果是否為真。

5. SetState 方法

之前,我們只介紹了管理狀態(tài)的 Flutter 包和庫。

當你的小部件更改數據值時,可以調用一個名為 setState 的方法。 它將導致 UI 根據新狀態(tài)發(fā)生變化。 你可以添加在狀態(tài)更改時執(zhí)行某些操作的代碼。 下面是 Flutter 中 setState 的基本實現:

class _MyHomePageState extends State<MyHomePage> {
  int _counter = 0;

  void _incrementCounter() {
    _counter++;
    setState(() {});
  }

總結

本文我們詳細了解了全局變量是什么以及為什么我們不應該在 Flutter 中使用它們。 此外,我們還探索了可用于更有效地管理狀態(tài)的各種狀態(tài)管理庫。

到此這篇關于為什么不要在 Flutter 中使用全局變量的文章就介紹到這了,更多相關Flutter 全局變量內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • Android消息循環(huán)機制源碼深入理解

    Android消息循環(huán)機制源碼深入理解

    這篇文章主要介紹了Android消息循環(huán)機制源碼深入理解的相關資料,需要的朋友可以參考下
    2017-07-07
  • Android自定義SeekBar滑動顯示數字

    Android自定義SeekBar滑動顯示數字

    這篇文章主要為大家詳細介紹了Android自定義SeekBar滑動顯示數字,使用FrameLayout結合SeekBar滑動時,數值顯示,滑動停止時顯示數字,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-09-09
  • 深入分析Android構建過程

    深入分析Android構建過程

    本篇內容主要講了Android 構建的過程需要的步驟以及從編譯到生成等原理,一起來學習下。
    2017-11-11
  • Android入門之Fragment嵌套Fragment的用法詳解

    Android入門之Fragment嵌套Fragment的用法詳解

    這篇文章主要為大家詳細介紹了Android中如何實現Fragment嵌套Fragment的相關資料,文中的示例代碼講解詳細,具有一定的借鑒價值,需要的可以參考一下
    2023-02-02
  • Android實現掃碼功能

    Android實現掃碼功能

    這篇文章主要為大家詳細介紹了Android實現掃碼功能,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-05-05
  • android實現音樂跳動效果的示例代碼

    android實現音樂跳動效果的示例代碼

    這篇文章主要介紹了android實現音樂跳動效果的示例代碼,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-04-04
  • Android實現viewpager實現循環(huán)輪播效果

    Android實現viewpager實現循環(huán)輪播效果

    這篇文章主要為大家詳細介紹了Android實現viewpager實現循環(huán)輪播效果,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-03-03
  • Android編程開發(fā)中的正則匹配操作示例

    Android編程開發(fā)中的正則匹配操作示例

    這篇文章主要介紹了Android編程開發(fā)中的正則匹配操作,結合具體實例形式分析了Android針對手機號、郵箱及IP的正則匹配操作相關實現技巧,需要的朋友可以參考下
    2017-06-06
  • 教你輕松制作Android音樂播放器

    教你輕松制作Android音樂播放器

    這篇文章主要教大家輕松制作Android音樂播放器,制作一款屬于自己的Android音樂播放器,希望大家喜歡。
    2015-11-11
  • Android ViewFlipper的詳解及實例

    Android ViewFlipper的詳解及實例

    這篇文章主要介紹了Android ViewFlipper的詳解及實例的相關資料,通過本文希望能幫助大家理解這部分內容,需要的朋友可以參考下
    2017-08-08

最新評論

永顺县| 富阳市| 吉安市| 峨山| 偏关县| 革吉县| 甘泉县| 镇原县| 西贡区| 高雄县| 镇原县| 明星| 吉隆县| 益阳市| 原阳县| 武清区| 雅安市| 疏勒县| 青田县| 个旧市| 盱眙县| 射洪县| 双柏县| 德化县| 南漳县| 永善县| 乌恰县| 微山县| 屏山县| 五原县| 东阳市| 慈溪市| 西安市| 武安市| 合作市| 南开区| 囊谦县| 蒙自县| 穆棱市| 陈巴尔虎旗| 奉化市|