欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

前言

全局變量似乎是很棒的 Flutter 程序組件,因?yàn)樗鼈儽宦暶饕淮尾⑶铱梢员怀绦蛑械拿總€(gè)函數(shù)訪問(wèn)。 但是,這些變量的成本比你想象的要高主要是因?yàn)椋?/strong>

  • 如果刪除一個(gè)全局變量,則必須搜索整個(gè)程序并重構(gòu)每個(gè)有權(quán)訪問(wèn)已刪除全局變量的函數(shù)
  • 它們很難測(cè)試,因?yàn)槟惚仨氃跍y(cè)試用例之間重置它們
  • 很難跟蹤更改,因?yàn)槊總€(gè)函數(shù)都可以修改全局變量

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

Flutter 中的全局變量是什么?

全局變量是公共變量,可以被 Flutter 程序中的每個(gè)方法和對(duì)象訪問(wèn)。

全局變量是局部變量的替代品,它們?cè)诜椒ㄖ袆?chuàng)建并在該方法中訪問(wèn)。

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

Flutter 中使用全局變量的缺點(diǎn)

在 Flutter 中使用全局變量一直受到質(zhì)疑和批評(píng),通常被認(rèn)為是不好的做法。 以下是使用全局變量的缺點(diǎn):

1. 復(fù)雜的代碼維護(hù)過(guò)程

更改或刪除一個(gè)全局變量會(huì)觸發(fā)一系列事件,因?yàn)槭褂萌肿兞康男〔考头椒▽⑹艿接绊憽?/p>

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

如果刪除一個(gè)全局變量,則必須搜索整個(gè)程序并重構(gòu)每個(gè)有權(quán)訪問(wèn)已刪除全局變量的函數(shù)。

2. 全局變量使單元測(cè)試變得痛苦

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

很難理解使用全局變量的遺留代碼,而理解程序流程是如何工作的更是難上加難。 很難有效地測(cè)試你不理解的代碼,調(diào)試也很困難,因?yàn)槟悴恢朗钦l(shuí)改變了全局變量。

3. 全局變量導(dǎo)致“面條”代碼

由于程序中的每個(gè)函數(shù)都可以修改全局變量,因此很難跟蹤更改。 如果你正在構(gòu)建一個(gè)大型應(yīng)用程序,在 Flutter 中使用全局變量的情況會(huì)升級(jí)。 即使你正在構(gòu)建小型 Flutter 應(yīng)用程序,全局變量也會(huì)導(dǎo)致災(zāi)難。

4. 全局變量無(wú)法封裝

全局變量使得無(wú)法實(shí)現(xiàn)封裝,這是一種將代碼包裝到單個(gè)單元中的 OOP 概念。 封裝使得代碼的維護(hù)變得安全和容易。 如果你想有效地使用封裝,你必須禁止全局變量。

由于全局變量創(chuàng)建了“面條”代碼,因此需要大量的規(guī)范來(lái)約束它們。 但是,有些開(kāi)發(fā)人員會(huì)使用全局變量,因?yàn)樗麄冊(cè)谝粋€(gè)小團(tuán)隊(duì)中,并且在某些情況下不利于更改。

但是,無(wú)論應(yīng)用程序的大小如何,當(dāng)需要維護(hù)代碼時(shí),全局變量都會(huì)帶來(lái)挑戰(zhàn)。 如果有必要使用全局變量,至少使它們不可變。

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

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

Flutter 是一個(gè)跨平臺(tái)的動(dòng)態(tài)框架,用于收集和處理來(lái)自用戶的數(shù)據(jù)。

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

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

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

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

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

該包將應(yīng)用程序狀態(tài)與 UI 分離,Provider 促進(jìn)應(yīng)用程序維護(hù)和測(cè)試。

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

dependencies:
  flutter:
    sdk: flutter

  provider: ^3.1.0

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

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

2. GetX

GetX 是一個(gè)輕量級(jí)的 Flutter 庫(kù),它提高了可擴(kuò)展性,因?yàn)樗试S你解耦視圖、依賴注入、表示層和依賴注入。

它提供以下功能:

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

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

要在 Flutter 應(yīng)用程序啟動(dòng)中開(kāi)始使用 GetX,請(qǐng)將 get 添加到你的 pubspec.yaml 文件中:

dependencies:
  get:

接下來(lái),導(dǎo)入使用 GetX 庫(kù)函數(shù)和組件時(shí)需要的 get 文件:

import 'package:get/get.dart';

3. Riverpod

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

此狀態(tài)管理器確保你的代碼可測(cè)試且易于閱讀,因?yàn)樗擞糜诮M合對(duì)象的嵌套。 特殊功能是它在編譯過(guò)程中檢測(cè)錯(cuò)誤。 這將節(jié)省你的時(shí)間,因?yàn)槟銓⒃谶\(yùn)行時(shí)將缺陷添加到你的應(yīng)用程序之前修復(fù)錯(cuò)誤。

4. Redux

Redux 是一個(gè)庫(kù),可幫助你有效地管理小部件的數(shù)據(jù)狀態(tài)。 Redux 是一種以單向方式跨小部件執(zhí)行狀態(tài)數(shù)據(jù)分布的架構(gòu)。 該庫(kù)很棒,因?yàn)樗藸顟B(tài)重復(fù),你可以測(cè)試狀態(tài)結(jié)果是否為真。

5. SetState 方法

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

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

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

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

總結(jié)

本文我們?cè)敿?xì)了解了全局變量是什么以及為什么我們不應(yīng)該在 Flutter 中使用它們。 此外,我們還探索了可用于更有效地管理狀態(tài)的各種狀態(tài)管理庫(kù)。

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

相關(guān)文章

  • android教程之textview解析帶圖片的html示例

    android教程之textview解析帶圖片的html示例

    本文介紹的示例適用于android中需要解析帶圖片的htlm數(shù)據(jù),需要的朋友可以參考下
    2014-02-02
  • Android寫(xiě)一個(gè)實(shí)時(shí)輸入框功能

    Android寫(xiě)一個(gè)實(shí)時(shí)輸入框功能

    這篇文章主要介紹了Android寫(xiě)一個(gè)實(shí)時(shí)輸入框功能,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-04-04
  • 匯總Android視頻錄制中常見(jiàn)問(wèn)題

    匯總Android視頻錄制中常見(jiàn)問(wèn)題

    這篇文章主要匯總了Android視頻錄制中常見(jiàn)問(wèn)題,幫助大家更好地解決Android視頻錄制中常見(jiàn)的問(wèn)題,需要的朋友可以參考下
    2015-12-12
  • Android GridView添加頭部問(wèn)題的解決

    Android GridView添加頭部問(wèn)題的解決

    這篇文章主要介紹了Android GridView添加頭部問(wèn)題的解決,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-04-04
  • Android中的webview支持頁(yè)面中的文件上傳實(shí)例代碼

    Android中的webview支持頁(yè)面中的文件上傳實(shí)例代碼

    本篇文章主要介紹了Android中的webview支持頁(yè)面中的文件上傳,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-03-03
  • 詳解Android文件描述符

    詳解Android文件描述符

    這篇文章主要介紹了詳解Android 文件描述符,對(duì)Android、Linux源碼感興趣的同學(xué),要著重看一下
    2021-04-04
  • Android Studio去除界面默認(rèn)標(biāo)題欄的方法

    Android Studio去除界面默認(rèn)標(biāo)題欄的方法

    這篇文章主要介紹了Android Studio去除界面默認(rèn)標(biāo)題欄的方法,本文通過(guò)圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2007-09-09
  • 詳解Android的MVVM框架 - 數(shù)據(jù)綁定

    詳解Android的MVVM框架 - 數(shù)據(jù)綁定

    這篇文章主要介紹了詳解Android的MVVM框架 - 數(shù)據(jù)綁定,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-05-05
  • Android實(shí)現(xiàn)連連看游戲

    Android實(shí)現(xiàn)連連看游戲

    這篇文章主要為大家詳細(xì)介紹了Android實(shí)現(xiàn)連連看游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-05-05
  • Android LeakCanary檢測(cè)內(nèi)存泄露原理

    Android LeakCanary檢測(cè)內(nèi)存泄露原理

    這篇文章主要介紹了分析LeakCanary檢測(cè)內(nèi)存泄露原理,幫助大家更好的理解和學(xué)習(xí)使用Android開(kāi)發(fā),感興趣的朋友可以了解下
    2021-03-03

最新評(píng)論