Flutter getx – usando una lista reactiva como argumento genera un error de uso incorrecto de getx.
Tengo un GetXController con RxList
[Get] se ha detectado un uso incorrecto de GetX.
El controlador se ve así:
class Controller extends GetxController {
static Controller get to => Get.find();
final RxList<int> numbers = <int>[].obs;
}
Y el uso es como este:
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),
)),
);
}
}
Si agrego la longitud de la lista como argumento, parece funcionar bien, pero estoy tratando de entender por qué esto no funciona.
El ejemplo completo se encuentra aquí https://pastebin.com/WrQqqsPx.
Gracias por cualquier ayuda.
davy.ai
El error “se ha detectado el uso inadecuado de un GetX” ocurre cuando hay una dependencia que está siendo actualizada pero no está siendo observada por ningún widget GetX. En este caso, la lista
numbers
es la única observable en la claseController
, pero cuando se pasa como argumento al widgetItemsList
, no se utiliza dentro de un widget GetX.Para solucionar este error, puede envolver el widget
ItemsList
con un widgetObx
y usar la listanumbers
dentro de él de esta manera:De esta manera, el widget
Obx
observará los cambios en la listanumbers
y actualizará la interfaz de usuario en consecuencia.Alternativamente, si se pasa la longitud de la lista como argumento, funcionará porque Flutter reconstruirá el widget cada vez que cambie la longitud, lo que hará que el widget
ItemsList
se reconstruya también. Sin embargo, este enfoque es menos eficiente porque se reconstruirá todo el árbol de widgets cada vez que cambie la lista, en lugar de solo las partes que necesitan ser actualizadas.