Flutter GetX 变量发生变化但 UI 没有

Flutter GetX variable changes but UI does not

我有两个包含自定义模型的 RxLists:

var openDepartures = RxList<Departure>([]);
var finishedDepartures = RxList<Departure>([]);

我绑定一个流以使用来自 firebase 的值填充这些 RxList。由于我的流(我绑定到变量)根据用户的选择而变化,我将新流绑定到同一个变量,但由于这会导致两个流控制一个变量,我在此之前“重置”变量:

openDepartures = RxList<Departure>();
finishedDepartures = RxList<Departure>();
....
openDepartures.bindStream(
  Database().getOpenDepartures(
    userController.userLocation.value,
  ),
);
finishedDepartures.bindStream(
  Database().getFinishedDepartures(
    userController.userLocation.value,
  ),
);

问题是 UI 没有刷新,但是当我不“重置”变量时,一切正常。同样奇怪的是,变量确实填充了正确的数据。它只是没有显示在 UI.

我尝试解决的问题:

我现在的问题是,如何让屏幕刷新,或者有人知道如何在不“重置”旧流并在一个变量上有多个流的情况下绑定新流吗?

使用update()喜欢 void() { foo = newData; update(); }

或使用 ProgressIndicator 像 RxBool loading = false.obs

void Foo() { loading.value = true; your logic... loading.value = false; }

并在 UI 中使用 controller.loading.value 检查进度并在加载完成时显示

终于解决了我的问题。潜在的问题是我将多个流绑定到一个变量,因此只要其中一个流被触发,该变量就会更新。解决方案如下:

  • 创建变量的RxList

final _openDepartureList = RxList<RxList<Departure>>();

  • 为该列表的最后一个元素创建一个 getter:

RxList<Departure> get openDepartures => _openDepartureList.last;

  • 删除旧项目:
if (_openDepartureList.length >= 2) {
  _openDepartureList.removeRange(0, _openDepartureList.length - 1);
}
  • 向列表中添加一个空 RxList

_openDepartureList.add(RxList.empty());

  • 将流绑定到列表的最后一个元素,即刚刚添加的元素

_openDepartureList.last.bindStream():

就是这样!我现在总是将正确的流绑定到我想要的变量,并且没有多个流控制一个变量。