Saltar al contenido

Cuándo usar Proveedor de vs consumidor en Flutter

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:

  1. ¿Es esta la forma correcta de distinguir Provider.of<X> y Consumer<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í.

  1. Si listen no está configurado para false ¿Se reconstruirá el widget de forma predeterminada o no se reconstruirá? Y si listen se establece en true?

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}).

  1. Porque tener Provider.of con la opción de reconstruir la interfaz de usuario cuando tengamos Consumer?

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.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *