Flutter getx - 使用递归列表作为参数会导致 getx 错误的不当使用

era*_*ran 1 flutter-getx

我有 GetXController 和 RxList,当我使用列表作为参数创建小部件时(这是唯一可观察的),我收到错误

[Get] the improper use of a GetX has been detected. 
Run Code Online (Sandbox Code Playgroud)

控制器看起来像这样:

class Controller extends GetxController {
  static Controller get to => Get.find();
  final RxList<int> numbers = <int>[].obs;
}
Run Code Online (Sandbox Code Playgroud)

用法是这样的:

class ShowWidget extends StatelessWidget {
  ShowWidget({Key? key}) : super(key: key);
  final Controller c = Controller.to;

  @override
  Widget build(BuildContext context) {
    return Container(
      height: 300,
      width: 300,
      color: Colors.red,
      child: (Obx(
        () => ItemsList(numbers: c.numbers),
      )),
    );
  }
}
Run Code Online (Sandbox Code Playgroud)

如果我添加列表长度作为参数,它似乎工作正常,但我试图了解为什么这不起作用。

完整示例在这里https://pastebin.com/WrQqqsPx

谢谢你的帮助。

S. *_*GIR 5

虽然列表是Rx默认的(因此不需要.value调用/执行操作),但是如果在观察者小部件(ObxGetX)上观察它们,您要么必须访问它们的元素,要么调用/调用任何方法/属性。因为在您这样做之前,它们仍然是Rx参考(如Stream)。只有在使用它们的实际值时才会观察到它们。这很像盒装/未等待的Future

因此,你可以这样做:

Obx(() => ItemsList(numbers: c.numbers.toList())),
Run Code Online (Sandbox Code Playgroud)

或者:

Obx(() => ItemsList(numbers: c.numbers.call())),
Run Code Online (Sandbox Code Playgroud)

不过我更喜欢打电话.toList()