我当前使用 Flutter 和 getx 包的项目遇到了一个非常奇怪的问题。简短:通知程序不工作。在 GetBuilder
的 initState
上,我尝试更新变量 (.obs) 并调用 update()
,但 View 对此一无所知。
复制代码
获取x Controller :
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"]
将通知 View 刷新国家。但什么也没发生。控制台显示正确的数据。所以变量确实被刷新了,但 View 没有收到通知。
flutter 版本: Flutter 2.2.3 • channel 稳定 • 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() 创建的实例。
关于 flutter 和getx : update() does not notify GetBuilder,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68953884/