Flutter getx - 使用 recative 列表作为参数会导致错误使用 getx
Flutter getx - using recative list as argument gives imporper use of getx error
我有带 RxList 的 GetXController,
当我使用列表作为参数创建小部件时(这是唯一可观察到的),我得到一个错误
[Get] the improper use of a GetX has been detected.
控制器看起来像这样:
class Controller extends GetxController {
static Controller get to => Get.find();
final RxList<int> numbers = <int>[].obs;
}
用法是这样的:
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),
)),
);
}
}
如果我添加列表长度作为参数,它似乎工作正常,但我试图了解为什么这不起作用。
完整示例在这里https://pastebin.com/WrQqqsPx
感谢您的帮助。
尽管列表默认为 Rx
(因此不需要 .value
到 call/do 操作),但如果在观察者小部件上观察它们 (Obx
,GetX
) 您要么必须访问它们的元素,要么 invoke/call 任何 methods/properties。因为在您这样做之前,它们仍然是 Rx
引用(如 Stream
)。只有在使用它们的实际值时才会观察到它们。这很像 boxed/un-awaited Future
.
因此,您可以这样做:
Obx(() => ItemsList(numbers: c.numbers.toList())),
或:
Obx(() => ItemsList(numbers: c.numbers.call())),
虽然我更喜欢打电话给 .toList()
。
我有带 RxList 的 GetXController, 当我使用列表作为参数创建小部件时(这是唯一可观察到的),我得到一个错误
[Get] the improper use of a GetX has been detected.
控制器看起来像这样:
class Controller extends GetxController {
static Controller get to => Get.find();
final RxList<int> numbers = <int>[].obs;
}
用法是这样的:
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),
)),
);
}
}
如果我添加列表长度作为参数,它似乎工作正常,但我试图了解为什么这不起作用。
完整示例在这里https://pastebin.com/WrQqqsPx
感谢您的帮助。
尽管列表默认为 Rx
(因此不需要 .value
到 call/do 操作),但如果在观察者小部件上观察它们 (Obx
,GetX
) 您要么必须访问它们的元素,要么 invoke/call 任何 methods/properties。因为在您这样做之前,它们仍然是 Rx
引用(如 Stream
)。只有在使用它们的实际值时才会观察到它们。这很像 boxed/un-awaited Future
.
因此,您可以这样做:
Obx(() => ItemsList(numbers: c.numbers.toList())),
或:
Obx(() => ItemsList(numbers: c.numbers.call())),
虽然我更喜欢打电话给 .toList()
。