广告
返回顶部
首页 > 资讯 > 移动开发 >为什么不要在 Flutter 中使用全局变量
  • 471
分享到

为什么不要在 Flutter 中使用全局变量

2024-04-02 19:04:59 471人浏览 薄情痞子
摘要

目录前言Flutter 中的全局变量是什么?Flutter 中使用全局变量的缺点1. 复杂的代码维护过程2. 全局变量使单元测试变得痛苦3. 全局变量导致“面条&rdqu

前言

全局变量似乎是很棒的 Flutter 程序组件,因为它们被声明一次并且可以被程序中的每个函数访问。 但是,这些变量的成本比你想象的要高主要是因为:

  • 如果删除一个全局变量,则必须搜索整个程序并重构每个有权访问已删除全局变量的函数
  • 它们很难测试,因为你必须在测试用例之间重置它们
  • 很难跟踪更改,因为每个函数都可以修改全局变量

以上所有原因都说明了为什么在 Flutter 中永远不应该使用全局变量。 在本文中,我们将详细了解全局变量的缺点,并学习如何以更有效的方式管理状态。

Flutter 中的全局变量是什么?

全局变量是公共变量,可以被 Flutter 程序中的每个方法和对象访问。

全局变量是局部变量的替代品,它们在方法中创建并在该方法中访问。

局部变量和全局变量之间的区别在于,局部变量不能被同一程序中的其他方法访问——因此,与全局变量相比,局部变量的作用域是有限的。

Flutter 中使用全局变量的缺点

在 Flutter 中使用全局变量一直受到质疑和批评,通常被认为是不好的做法。 以下是使用全局变量的缺点:

1. 复杂的代码维护过程

更改或删除一个全局变量会触发一系列事件,因为使用全局变量的小部件和方法将受到影响。

如果要更改全局变量,则必须分析访问全局变量的每个小部件将如何受到影响并进行特定且必要的更改。

如果删除一个全局变量,则必须搜索整个程序并重构每个有权访问已删除全局变量的函数。

2. 全局变量使单元测试变得痛苦

如果你更改了一个具有全局变量的模块,那么你将不得不为下一次测试重置它

很难理解使用全局变量的遗留代码,而理解程序流程是如何工作的更是难上加难。 很难有效地测试你不理解的代码,调试也很困难,因为你不知道是谁改变了全局变量。

3. 全局变量导致“面条”代码

由于程序中的每个函数都可以修改全局变量,因此很难跟踪更改。 如果你正在构建一个大型应用程序,在 Flutter 中使用全局变量的情况会升级。 即使你正在构建小型 Flutter 应用程序,全局变量也会导致灾难。

4. 全局变量无法封装

全局变量使得无法实现封装,这是一种将代码包装到单个单元中的 OOP 概念。 封装使得代码的维护变得安全和容易。 如果你想有效地使用封装,你必须禁止全局变量。

由于全局变量创建了“面条”代码,因此需要大量的规范来约束它们。 但是,有些开发人员会使用全局变量,因为他们在一个小团队中,并且在某些情况下不利于更改。

但是,无论应用程序的大小如何,当需要维护代码时,全局变量都会带来挑战。 如果有必要使用全局变量,至少使它们不可变。

在下一部分中,你将学习状态管理库和包,它们提供了以更好的方式管理变量状态的更好方法,而不会影响维护过程。

如何以更好的方式管理状态

Flutter 是一个跨平台的动态框架,用于收集和处理来自用户的数据。

从开关到单选按钮,必须有效地管理数据状态。 但是,全局变量会增加应用程序数据流的复杂性。 全局变量使数据很容易发生变异,这可能会导致处理从用户那里收集的数据时出现混乱。

provider 等状态管理包可用于缓解全局变量带来的问题。 以下是可用于管理状态的状态包管理器和库的列表:

1. Provider 状态管理包

Provider 状态管理器包被广泛用于收集小部件状态数据并在状态更改时更新小部件。

使用提供程序时,只有受影响的小部件会在数据发生突变时被更新。 与随处变化的全局变量相比,Provider 降低了复杂性。 Provider 从小部件收集数据并监听小部件周围发生的数据变化。

该包将应用程序状态与 UI 分离,Provider 促进应用程序维护和测试。

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

dependencies:
  flutter:
    sdk: flutter

  provider: ^3.1.0

Provider 程序包还允许你与多个类共享小部件状态:

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

2. GetX

GetX 是一个轻量级的 Flutter 库,它提高了可扩展性,因为它允许你解耦视图、依赖注入、表示层和依赖注入。

它提供以下功能:

  • 状态管理
  • 依赖注入
  • 导航
  • 路由管理

如果你正在寻找一个节省资源且消耗最少的库,GetX 是你的最佳选择。

要在 Flutter 应用程序启动中开始使用 GetX,请将 get 添加到你的 pubspec.yaml 文件中:

dependencies:
  get:

接下来,导入使用 GetX 库函数和组件时需要的 get 文件:

import 'package:get/get.dart';

3. Riverpod

Riverpod 类似于 `provider——唯一的区别是它以单向方式分发数据。

此状态管理器确保你的代码可测试且易于阅读,因为它消除了用于组合对象的嵌套。 特殊功能是它在编译过程中检测错误。 这将节省你的时间,因为你将在运行时将缺陷添加到你的应用程序之前修复错误。

4. Redux

Redux 是一个库,可帮助你有效地管理小部件的数据状态。 Redux 是一种以单向方式跨小部件执行状态数据分布的架构。 该库很棒,因为它消除了状态重复,你可以测试状态结果是否为真。

5. SetState 方法

之前,我们只介绍了管理状态的 Flutter 包和库。

当你的小部件更改数据值时,可以调用一个名为 setState 的方法。 它将导致 UI 根据新状态发生变化。 你可以添加在状态更改时执行某些操作的代码。 下面是 Flutter 中 setState 的基本实现:

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

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

总结

本文我们详细了解了全局变量是什么以及为什么我们不应该在 Flutter 中使用它们。 此外,我们还探索了可用于更有效地管理状态的各种状态管理库。

到此这篇关于为什么不要在 Flutter 中使用全局变量的文章就介绍到这了,更多相关Flutter 全局变量内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: 为什么不要在 Flutter 中使用全局变量

本文链接: https://www.lsjlt.com/news/165821.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 为什么不要在 Flutter 中使用全局变量
    目录前言Flutter 中的全局变量是什么?Flutter 中使用全局变量的缺点1. 复杂的代码维护过程2. 全局变量使单元测试变得痛苦3. 全局变量导致“面条&rdqu...
    99+
    2022-11-13
  • python中为什么尽量少用全局变量
    这篇文章主要介绍了python中为什么尽量少用全局变量,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。尽量少用全局变量Python查找最快、效率最高的是局部变量,查找全局变量相...
    99+
    2023-06-27
  • 如何在Unity中使用全局变量
    本篇文章为大家展示了如何在Unity中使用全局变量,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。创建一个脚本,输入下面的代码。脚本不需要添加到任何物体上,globle变量可以跨场景全局调用。usin...
    99+
    2023-06-14
  • 怎么在vue组件中使用全局变量
    在vue组件中使用全局变量的方法:1.新建vue.js项目;2.使用export方法定义全局变量;3.使用Vue.prototype方法挂载全局变量;4.使用this调用全局变量;具体步骤如下:首先,在vue-cli中创建一个vue.js项...
    99+
    2022-10-16
  • php全局变量在函数内不能使用怎么办
    本教程操作环境:windows7系统、PHP7.1版,DELL G3电脑一般情况下全局变量在函数内是不能使用,但有时我们就必须要在函数内使用全局变量,这要怎么办?PHP提供了两种解决方法: global关键字和$GLOBALS超全局变量。方...
    99+
    2018-03-28
    php 全局变量 函数
  • 在Unity中使用全局变量的操作
    创建一个脚本,输入下面的代码。脚本不需要添加到任何物体上,globle变量可以跨场景全局调用。 using System.Collections; using System.Co...
    99+
    2022-11-12
  • 如何在PHP中使用超全局变量
    PHP中的超全局变量是指在全局范围内都可以访问的变量,每个超全局变量都是一个关联数组,其中包含了PHP中的许多预定义变量,如$_GET、$_POST、$_COOKIE等等。这些超全局变量在Web开发中非常重要,因为它们提供了从用户请求中获取...
    99+
    2023-05-20
    变量作用域 超全局变量 PHP Hypertext Preprocessor
  • 为什么不使用isSuccess作为变量名
    本篇内容介绍了“为什么不使用isSuccess作为变量名”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!在日常开发中,我们会经常要在类中定义布...
    99+
    2023-06-04
  • python怎么在函数中调用全局变量
    在Python中,如果要在函数中调用全局变量,可以使用`global`关键字将变量声明为全局变量。下面是一个示例:```python...
    99+
    2023-09-25
    python
  • PHP全局变量怎么在函数中调用
    这篇文章主要讲解了“PHP全局变量怎么在函数中调用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“PHP全局变量怎么在函数中调用”吧!在介绍函数内部调用全局变量方法之前,我们来了解一下变量作用...
    99+
    2023-06-20
  • python中全局变量的作用域有什么用
    全局变量在Python中的作用域是整个程序的范围,可以在程序的任何地方使用和修改。这样的特性有以下几个用途:1. 共享数据:全局变量...
    99+
    2023-08-12
    python
  • java中怎么模拟和使用全局变量
    在Java中,没有全局变量的概念。但是可以通过以下几种方式来模拟和使用全局变量:1. 使用静态变量:将需要模拟的全局变量定义为一个静...
    99+
    2023-09-15
    java
  • 怎么在java中利用全局变量终止线程
    这期内容当中小编将会给大家带来有关怎么在java中利用全局变量终止线程,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。Java的特点有哪些Java的特点有哪些1.Java语言作为静态面向对象编程语言的代表,...
    99+
    2023-06-15
  • 为什么永远不要在MySQL中使用UTF-8
    这篇文章给大家介绍为什么永远不要在MySQL中使用UTF-8,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。最近我遇到了一个bug,我试着通过Rails在以“utf8”编码的MariaDB中保存一个UTF-8字符串,然后...
    99+
    2023-06-19
  • User这个词为什么不要在代码中使用
    今天给大家介绍一下User这个词为什么不要在代码中使用。文章的内容小编觉得不错,现在给大家分享一下,觉得有需要的朋友可以了解一下,希望对大家有所帮助,下面跟着小编的思路一起来阅读吧。当你意识到你在项目开始时做的轻量、简单的设想竟然完全错了时...
    99+
    2023-06-28
  • 为什么不需要在JavaScript使用switch 语句!
    本篇文章为大家展示了为什么不需要在JavaScript使用switch 语句!,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。没有 switch 就没有复杂的代码块s...
    99+
    2022-10-19
  • 为什么要在Ruby APP中使用Neo4j
    为什么要在Ruby APP中使用Neo4j,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。每天,我都需要储存大量的数据,而我可以使用很多工具,比如 Postgre...
    99+
    2023-06-17
  • C语言开发单片机为什么大多数都采用全局变量的形式
    一、做控制的工程师特点 他们普遍的理解就是“变量都写成全局该有多方便”。我之前面试过一个非常有名的做控制实验室里出来的PhD/Master,前前后后陆续有快十个人。面试问题是用C写PID。到后面的几位面试的时候我都觉得没有...
    99+
    2023-10-29
    单片机 形式 全局变量
  • 为什么不要在using语句中调用WCF服务
    这篇文章主要介绍为什么不要在using语句中调用WCF服务,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!如果你调用WCF服务时,像下面的代码这样在using语句中进行调用,需要注意一个问题。using (C...
    99+
    2023-06-17
  • 为什么要停止在JavaScript中使用类
    为什么要停止在JavaScript中使用类,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。多年来,OOP(面向对象编程)是软件工程中的事实上的标...
    99+
    2022-10-19
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作