flutter中setState和GetX有什么区别?

问题描述 投票:0回答:3

我只是期待了解使用普通

setState(() {})
update()
包的
Getx
方法之间的区别。

从实际角度来看,当使用

setState(() {])
时,整个页面都会重建,但当 GetX 使用时,仅重建 .obs 的一部分。我想了解的是更深入的区别。

flutter dart flutter-dependencies flutter-getx
3个回答
4
投票

setState 将刷新整个小部件。但是使用 Getx 您可以刷新特定的小部件。

您可以从此链接找到更多信息:Getx Controller


1
投票

Getx
的状态管理器,是一个让您从单独的位置(即
GetxController
)控制和管理小部件状态的工具。

Getx
状态管理小部件,如
GetBuilder()
Getx()
Obx()
...是
StatfulWidget
,在幕后,它们也使用普通的
SetState(() {})
,但调用它们的实现是与平常的
setState(() {})
通话真的不同。

例如,

GetBuilder()

class GetBuilder<T extends GetxController> extends StatefulWidget {
  final GetControllerBuilder<T> builder;
  final bool global;
  final Object? id;
  final String? tag;
  final bool autoRemove;
  final bool assignId;
  final Object Function(T value)? 
  /*...*/

在底层,它通过获取如下方法来更新状态:

  void getUpdate() {
    if (mounted) setState(() {});
  }

然后将其存储在

Map
中,我们从控制器中使用
update()
调用它。


你的句子:

从实际角度来看,当使用 setState 时,整个页面都会重建,但当 GetX 使用时,仅重建 .obs 的一部分

错了!

尝试用

GetBuilder
包装整个页面并从其控制器调用
update()
,您将对整个页面进行完全重建,因为它只是一个普通的
StatefulWidget
,将通过调用其
build()
来重建方法一次又一次...

您面临整个页面状态更新,因为您用

StatfulWidget
包裹了整个页面,与
GetBuilder()
Obx()
...

相同

有一个

Flutter
构建器小部件,让您还可以在本地管理其子级的状态,即 StatefulBuilder,快速检查一下,我建议您使用它来了解使用构建器小部件的方法更新状态。

除了

Getx
使您能够将逻辑和状态管理分离到
GetxController
中,它还可以让您控制哪个小部件使用其自己的自定义机制精确更新,例如使用
update()
方法(它调用普通的 SetState (() {}) ) 具有特定的
id
,如下所示:

update([id1, id2, id3]);

Map
上进行搜索,其中存储了从
SetState(() {})
Getx
获得的所有
GetBuilder()
,然后查找与该
id
匹配的内容,然后仅调用属于它的内容,这就是导致具有其中一个
id
的小部件将被更新,而其他小部件不会的原因。

您可以通过快速阅读其源代码来了解有关

Getx
如何工作的更多信息,我想这对您很有帮助。


0
投票
  1. setState(() {})
    State
    类提供的方法,
    GetX
    是Flutter的状态管理提供者。

  2. 当您调用

    setState(() {})
    时,将再次调用小部件的 build 方法,并且
    setState(() {})
    函数内状态变量的任何更改都会反映在
    rebuilt
    UI 中。使用
    GetX
    ,应用程序可以侦听状态变化并自动更新 UI,而无需显式调用
    setState(() {})
    ,因为
    GetX
    使用
    Observables
    、响应式
    GetBuilder
    ReactiveGetX
    的组合来管理
     state
    以高效的方式。

了解更多详情请访问GetX

© www.soinside.com 2019 - 2024. All rights reserved.