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 listenconjunto de parámetros falsecomo se muestra a continuación:
Provider.of<CartModel>(context, listen: false).add(item); \\Widget won't rebuild
Sin embargo, listenno 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
listenno se establece enfalse¿se reconstruirá el widget por defecto o no se reconstruirá? ¿Qué pasa silistense establece entrue? - ¿Por qué tener
Provider.ofla opción de reconstruir la interfaz de usuario cuando tenemosConsumer?
fuente

Consumerbásicamente no es más queProvider.ofun nuevo widget