flutter 获取何时使用 GetX<Controller>、GetBuilder<Controller> 或 Obx()

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

正如标题所示,有几种更新状态的方法。我什么时候应该选择一种而不是另一种?

flutter flutter-get
2个回答
44
投票

对此没有硬性规定,但我尝试做出以下决定:

OBX

  • 当我的控制器已经在其他地方注册并且我想要
  • 最少的代码/噪音
  • 反应式小部件

获取X

  • 当我的控制器尚未注册或
  • 我想非常明确/明显地说明正在使用哪个控制器或
  • 我需要在创建过程中运行一些
    initState
    调用,我想要
  • 反应式小部件

获取构建器

  • 我想手动决定小部件何时重建
  • 我有几个状态变量,作为一个组一起刷新是有意义的

注释

在底层,Obx 和 GetX 都使用流,订阅控制器可观察变量更改流以了解何时进行反应式重建。

GetBuilder 没有。

GetX 和 GetBuilder 都扩展了

StatefulWidget


0
投票

在GetX包中有两种编写控制器的方法:

第一:

class Controller extends GetxController {
  int counter = 0;
  void increment() {
    counter++;
    update(); 
  }
}

这称为简单状态管理器。它使用一个简单的回调来通知消费者小部件。并且该小部件只能是 GetBuilder。

GetBuilder<Controller>(
  builder: (controller) => Text(
    '${controller.counter}',
  ),
)

GetBuilder 的性能超级友好。应尽可能使用它。

控制器的第二种写法:

class Controller extends GetxController {
  var count = 0.obs;

  increment() {
    count.value++;
    //refresh();
  }
}

这称为反应式状态管理器。它在底层使用流。流很棒,但它们消耗大量资源。

要使用这种状态,我们需要 Obx 或 GetX。

Obx 示例:

child: Obx(
        () => Text(
    '${controller.counter}',
  ),
),

Obx 无法使用控制器类型进行参数化,因此要获取控制器实例,我们应该将 GetView 或 GetWidget 或 StatelessWidget 与 Get.find 结合使用。

这就是 GetX 小部件可以提供帮助的地方。

GetX 示例:

GetX<Controller>(
            init: Get.put<Controller>(Controller()),
            builder: (controller) {
              return Text( '${controller.counter}');
            },
          )

Obx 和 GetX 的区别在于 GetX 有 init 和 builder 属性。此外,GetX 可以通过控制器类型进行参数化。 init 属性是可选的。仅当控制器尚未初始化时才需要。

结论 尽可能使用 GetBuilder。它对性能非常友好。 👍 仅在必要时才使用 Obx 和 GetX。 将 Obx 与 GetView 或 GetWidget 或 Get.find 结合使用。 当您想要直接在小部件内初始化控制器时,请使用 GetX。 来自这篇文章

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