Solución:
No importa. Pero para explicar las cosas rápidamente:
Provider.of
es el solamente forma de obtener y escuchar un objeto.
Consumer
, Selector
, y todas las llamadas * ProxyProvider Provider.of
trabajar.
Provider.of
vs Consumer
es una cuestión de preferencia personal. Pero hay algunos argumentos para ambos
Proveedor de
- se puede llamar en todo el ciclo de vida de los widgets, incluidos los controladores de clic y
didChangeDependencies
- no aumenta la sangría
Consumidor
- permite reconstrucciones de widgets más granulares
- resuelve la mayoría de los usos indebidos de BuildContext
Para sus preguntas:
- ¿Es esta la forma correcta de distinguir
Provider.of<X>
yConsumer<X>
. El ex no actualiza la interfaz de usuario, el último lo hace?
Provider.of<X>
depende del valor de listen
para desencadenar una nueva State.build
a los widgets y State.didChangeDependencies
por StatefulWidget
.
Consumer<X>
siempre actualice la interfaz de usuario, ya que utiliza Provider.of<T>(context)
, dónde listen
es true
. Vea la fuente completa aquí.
- Si
listen
no está configurado parafalse
¿Se reconstruirá el widget de forma predeterminada o no se reconstruirá? Y silisten
se establece entrue
?
El valor predeterminado es true
, los medios desencadenarán una nueva State.build
a los widgets y State.didChangeDependencies
por StatefulWidget
. Vea la fuente completa aquí.
static T of<T>(BuildContext context, {bool listen = true})
.
- Porque tener
Provider.of
con la opción de reconstruir la interfaz de usuario cuando tengamosConsumer
?
Casi cubierto por la respuesta de Rémi Rousselet.
No debería haber ningún problema de rendimiento al usarlo, además, deberíamos usar consumidores si queremos cambiar algún widget específico solo en la pantalla. Este es el mejor enfoque que puedo decir en términos de práctica de codificación.
return Container(
// ...
child: Consumer<PersonModel>(
builder: (context, person, child) {
return Text('Name: ${person.name}');
},
),
);
Al igual que en el ejemplo anterior, solo necesitamos actualizar el valor del widget de texto único, así que agregue el consumidor allí en lugar del proveedor, que también es accesible para otros widgets.
Nota: El consumidor o el proveedor actualizan la única referencia de su instancia que los widgets están usando, si algunos widgets no se usan, no se volverá a dibujar.