我有帶有 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
調用/執行操作),但如果在觀察者小部件(Obx
, GetX
)上觀察它們,您要么必須訪問它們的元素或調用/調用任何方法/屬性。因為在您這樣做之前,它們仍然是Rx
引用(如Stream
)。只有在使用它們的實際值時才會觀察到它們。這很像 boxed/un-awaited Future
。
因此,您可以執行以下操作:
Obx(() => ItemsList(numbers: c.numbers.toList())),
或者:
Obx(() => ItemsList(numbers: c.numbers.call())),
.toList()
不過我更喜歡打電話。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句