O documento discute diferentes padrões de arquitetura para gerenciamento de estado em aplicativos Flutter, incluindo Provider, BLoC e Repositórios. É apresentado como esses padrões podem ser usados para resolver problemas comuns como comunicação entre widgets, gerenciamento de estado centralizado e injeção de dependências. Dúvidas frequentes sobre esses padrões também são abordadas.
6. Widgets e comunicação
Widgets
- Ui é Widget
- Stateless
- Statefull
- Inherited
- SetState
- Recebem informações
- Retornam informações
- Comunicam-se entre si
7. Repository Pattern
Repositórios
- Fornecem um ponto único de acesso à dados
- Podem ser chamados nas páginas, BLoCs, etc
- Retornam Future para ser usado nos FutureBuilders*
8. Repository Pattern
class ProductListItemModel {
...
ProductListItemModel.fromJson(Map<String, dynamic> json) {
id = json['id'];
title = json['title'];
brand = json['brand'];
tag = json['tag'];
price = json['price'];
image = json['image'];
}
...
}
9. Repository Pattern
class ProductRepository {
Future<List<ProductListItemModel>> getAll() async {
var url = "${Settings.apiUrl}v1/products";
Response response = await Dio().get(url);
return (response.data as List)
.map((course) => ProductListItemModel.fromJson(course))
.toList();
}
...
27. Notificações
class CartBloc extends ChangeNotifier {
var cart = new List<CartItemModel>();
double total = 0;
...
calculateTotal() {
total = 0;
cart.forEach((x) {
total += (x.price * x.quantity);
});
notifyListeners();
}
...
28. Dúvidas Frequentes
Dúvidas
- Posso utilizar BLoC com Provider?
- BLoC não pode referenciar Material/Cupertino
- Preciso de um BLoC para cada página?
- Preciso trabalhar com Streams?
- Preciso de repositórios?