如何在 flutter getx 中给 obs 赋值

How to assign value to obs in flutter getx

下面的代码到目前为止工作正常,

class Controller extends GetxController{
  var count = 0.obs;
  increment() => count++;
}

但是当我分配一个值时,它没有按预期工作,不是类型转换事件。

class Controller extends GetxController{
  var count = 0.obs;
  reset() => count = 10;
}

我想知道如何在 get x obs objects 中赋值(使用'=')?

这个答案在我被告知我错了之后已经改变了。我想感谢 Ivo Beckers 指出我对 RxInt 工作原理的误解。请为他的回答点赞。

0.obs return 类型 RxInt。当您在此对象上调用 ++ 时,它会调用 RxInt 对象上的 + 运算符并使用 1 来增加值。应该注意的是,RxInt+- 运算符确实操作对象本身,因此不像例如int 是不可变的,因此需要 return 来自操作的新对象。

当您执行 count = 10 时,您实际上是在说您希望 count 被类型 int 而不是 RxInt10 覆盖.

您想要的更有可能是以下内容,您可以向任何订阅者报告该值已重置为 10:

class Controller extends GetxController{
  var count = 0.obs;
  reset() => count.value = 10;
}

要设置 RxInt 的值,您只需将其分配给该值即可。所以你

reset() => count.value = 10;

++ 也起作用的原因是因为 count++ 简单地转换为 count = count + 1 并且这会调用 RxInt 实例上的运算符,这只会增加它的值,如您在RxInt:

的执行
class RxInt extends Rx<int> {
  RxInt(int initial) : super(initial);

  /// Addition operator.
  RxInt operator +(int other) {
    value = value + other;
    return this;
  }

  /// Subtraction operator.
  RxInt operator -(int other) {
    value = value - other;
    return this;
  }
}