我有 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
谢谢你的帮助。
虽然列表是Rx默认的(因此不需要.value调用/执行操作),但是如果在观察者小部件(Obx、GetX)上观察它们,您要么必须访问它们的元素,要么调用/调用任何方法/属性。因为在您这样做之前,它们仍然是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()。
| 归档时间: |
|
| 查看次数: |
557 次 |
| 最近记录: |