Flutter 和 getx:update() 不通知 GetBuilder

Flutter and getx: update() does not notify GetBuilder

对于我当前使用 Flutter 和 getx 包的项目,我有一个非常奇怪的问题。简短:通知程序不工作。在 GetBuilderinitState 上,我尝试更新变量 (.obs) 并调用 update(),但视图对此一无所知。

复制码

获取控制器:

class HoursController extends GetxController {
  final AwController awController = AwController();
  final hours = [].obs;

  void loadHours({required Kunde kunde}) async {
    this.hours.assignAll(["Test1", "Test2"]);
    update(["hours"]);
  }
}

查看:

GetBuilder<HoursController>(
  id: "hours",
  initState: (_) {
    HoursController().loadHours(kunde: this.kunde);
  },
  builder: (controller) {
    if (controller.hours.length == 0) {
      return Container(
        child: Text("Nothing"),
      );
    }
    return ListView.builder(
        shrinkWrap: true,
        physics: ClampingScrollPhysics(),
        itemCount: controller.hours.length,
        itemBuilder: (BuildContext context, int index) {
          return ListTile(
            title: Text(controller.hours[index]),
          );
        });
  },
)

预期行为initState 上调用函数更改 hours 变量后,我希望 update["hours"] 会通知视图刷新状态。但是没有任何反应。控制台显示正确的数据。所以变量确实被刷新了,但是视图没有被通知。

Flutter 版本: Flutter 2.2.3 • 通道稳定 • https://github.com/flutter/flutter.git 框架 • 修订版 f4abaa0735(8 周前) • 2021-07-01 12:46:11 -0700 引擎 • 修订版 241c87ad80 工具 • Dart 2.13.4

Getx 版本: 4.3.8

顺便说一句 我正在使用 Flutter Desktop

好的,解决了...问题是 HoursController().loadHours(kunde: this.kunde);。在这里,我创建了一个新的 HoursController 实例。但是我需要使用上面创建的实例 Get.find().

如果您的 GetBuilder 没有使用 update() 方法更新,那么还要检查您是否覆盖了控制器的 refresh 方法,而不是在被覆盖的方法中调用 super.refresh() .我有同样的问题花了我一段时间才意识到。