【问题标题】:Flutter GetX variable changes but UI does notFlutter GetX 变量发生变化,但 UI 没有
【发布时间】:2021-11-14 20:51:18
【问题描述】:

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

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() 方法
  • Get.reloadAll()
  • 对变量调用 .refresh()
  • 再次配置和初始化控制器

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

【问题讨论】:

    标签: firebase flutter dart flutter-getx


    【解决方案1】:

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

    或使用 ProgressIndicator 喜欢 RxBool loading = false.obs

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

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

    【讨论】:

    • 试过了,可惜没用:(
    • 是的,这通常对我也不起作用,尝试使用加载指示器强制重新加载屏幕
    • 加载指示器如何导致 UI 被更新?
    • 我编辑了答案,请检查
    • 问题是我没有什么要加载的。我有一个不断来自 firebase 的数据流,但是当我将变量重置为新的 RxType 时,UI 没有更新
    【解决方案2】:

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

    • 创建变量的RxList

    final _openDepartureList = RxList&lt;RxList&lt;Departure&gt;&gt;();

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

    RxList&lt;Departure&gt; get openDepartures =&gt; _openDepartureList.last;

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

    _openDepartureList.add(RxList.empty());

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

    _openDepartureList.last.bindStream():

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

    【讨论】:

      猜你喜欢
      • 2021-11-06
      • 2021-01-07
      • 2021-08-18
      • 2022-07-05
      • 2019-09-23
      • 2020-09-22
      • 2021-05-07
      • 2021-09-19
      • 2021-03-15
      相关资源
      最近更新 更多