【发布时间】:2022-11-27 14:13:20
【问题描述】:
我只是期待了解使用普通 setState(() {}) 和 Getx 包的 update() 方法之间的区别。
从实际的角度来看,当使用 setState(() {]) 时,整个页面都会重建,但当 GetX 使用时,仅重建 .obs 的一部分。我想了解的是更深入的区别。
【问题讨论】:
标签: flutter dart flutter-dependencies flutter-getx
我只是期待了解使用普通 setState(() {}) 和 Getx 包的 update() 方法之间的区别。
从实际的角度来看,当使用 setState(() {]) 时,整个页面都会重建,但当 GetX 使用时,仅重建 .obs 的一部分。我想了解的是更深入的区别。
【问题讨论】:
标签: flutter dart flutter-dependencies flutter-getx
setState 将刷新整个小部件。但是使用 Getx 可以刷新特定的小部件。
您可以从此链接找到更多信息:Getx Controller
【讨论】:
Getx 的状态管理器是一种工具,可让您从单独的位置控制和管理小部件状态,即 GetxController。
Getx 状态管理小部件,如GetBuilder()、Getx()、Obx()... 是StatfulWidgets 并且在引擎盖下,它们也使用普通的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()...有一个
Flutterbuilder widget 可以让你在本地管理它的孩子的状态,它是 StatefulBuilder,快速检查一下,我建议你使用它来理解使用 builder widget 的方法更新状态。除了
Getx使您能够将逻辑和状态管理分离到GetxController中,它还允许您使用自己的自定义机制控制要更新的小部件,例如使用update()方法(它调用普通的 SetState( () {}) ) 与特定的id,像这样:update([id1, id2, id3]);在引擎盖下搜索
Map,它存储从Getx的GetBuilder()获得的所有SetState(() {}),然后查找与id匹配的内容,然后只调用属于它的内容,然后这是导致具有其中一个id的小部件将被更新,而其他小部件不会更新的原因。你可以通过快速阅读它的源代码来了解更多关于
Getx是如何工作的,我想这对你会有很大帮助。
【讨论】: