Flutter 和 getx:update() 不通知 GetBuilder
Flutter and getx: update() does not notify GetBuilder
对于我当前使用 Flutter 和 getx
包的项目,我有一个非常奇怪的问题。简短:通知程序不工作。在 GetBuilder
的 initState
上,我尝试更新变量 (.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()
.我有同样的问题花了我一段时间才意识到。
对于我当前使用 Flutter 和 getx
包的项目,我有一个非常奇怪的问题。简短:通知程序不工作。在 GetBuilder
的 initState
上,我尝试更新变量 (.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()
.我有同样的问题花了我一段时间才意识到。