Todavía estoy envolviendo mi cabeza alrededor de técnicas de control del estado en el flúter y estoy un poco confundido acerca de cuándo y por qué utilizar Provider.of<X>
vs Consumer<X>
. Entiendo (creo) de la documentación que al elegir entre estos dos usaría el proveedor de cuando queremos acceder a los datos, pero no necesita cambiar la interfaz de usuario. Entonces, lo siguiente (tomado de los documentos) obtiene acceso a los datos y actualiza la IU en nuevos eventos:
return HumongousWidget(
// ...
child: AnotherMonstrousWidget(// <- This widget will rebuild on new data events
// ...
child: Consumer<CartModel>(
builder: (context, cart, child) {
return Text('Total price: ${cart.totalPrice}');
},
),
),
);
Mientras que donde solo necesitamos los datos no queremos reconstruir con la interfaz de usuario, los usaríamos Provider.of<X>
con el listen
conjunto de parámetros false
como se muestra a continuación:
Provider.of<CartModel>(context, listen: false).add(item); \\Widget won't rebuild
Sin embargo, listen
no es obligatorio, por lo que también se ejecutará lo siguiente:
Provider.of<CartModel>(context).add(item); \\listener optional
Esto me lleva a algunas preguntas:
- ¿Es esta la forma correcta de distinguir
Provider.of<X>
yConsumer<X>
. El primero no actualiza la interfaz de usuario, ¿el último sí? - Si
listen
no se establece enfalse
¿se reconstruirá el widget por defecto o no se reconstruirá? ¿Qué pasa silisten
se establece entrue
? - ¿Por qué tener
Provider.of
la opción de reconstruir la interfaz de usuario cuando tenemosConsumer
?
fuente
Consumer
básicamente no es más queProvider.of
un nuevo widget