Eu ainda estou quebra minha cabeça em torno de técnicas de gerenciamento de estado em vibração e estou um pouco confuso sobre quando e por que usar Provider.of<X>
vs. Consumer<X>
. Entendo (acho) a partir da documentação que, ao escolher entre esses dois, você usaria Provider.of quando quisermos acessar os dados, mas você não precisará alterar a interface do usuário. Portanto, o seguinte (extraído dos documentos) obtém acesso aos dados e atualiza a interface do usuário em novos 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}');
},
),
),
);
Considerando que, onde apenas precisamos dos dados e não queremos reconstruir com a interface do usuário, usaríamos Provider.of<X>
com o listen
parâmetro definido false
como, como abaixo:
Provider.of<CartModel>(context, listen: false).add(item); \\Widget won't rebuild
No entanto, listen
não é necessário e, portanto, o seguinte também será executado:
Provider.of<CartModel>(context).add(item); \\listener optional
Então, isso me leva a algumas perguntas:
- Essa é a maneira correta de distinguir
Provider.of<X>
eConsumer<X>
. A versão anterior não atualiza a interface do usuário, a última? - Se
listen
não estiver definido comofalse
, o widget será reconstruído por padrão ou não será reconstruído? E selisten
estiver definido comotrue
? - Por que ter
Provider.of
a opção de reconstruir a interface do usuário quando temosConsumer
?
fonte
Consumer
é basicamente nada, masProvider.of
em um novo widget