SlideShare uma empresa Scribd logo
1 de 31
Flutter Talks
Provider, BLoC e SM
Entendendo de uma vez por todas
André
Baltieri
7x Microsoft MVP
Speaker
Fullstack Developer
CEO do balta.io
Siga me nas Redes
Sociais -
@andrebaltieri
Cenário 1
Widgets
- Listar as categorias
- Listar os produtos
- Exibir o menu inferior
Widgets e comunicação
Widgets
- Ui é Widget
- Stateless
- Statefull
- Inherited
- SetState
- Recebem informações
- Retornam informações
- Comunicam-se entre si
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*
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'];
}
...
}
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();
}
...
Repository Pattern
class ProductPage extends StatelessWidget {
...
final _repository = new ProductRepository();
@override
Widget build(BuildContext context) {
return FutureBuilder<ProductDetailsModel>(
future: _repository.get(tag),
builder: (context, snapshot) {
ProductDetailsModel product = snapshot.data;
...
Cenário 2
Comunicação
- Adicionar produto ao carrinho
- Notificar botão “Adicionar ao carrinho”
- Notificar menu inferior
Widgets e comunicação
Qual problema?
- Comunicação com vários Widgets
- Comunicação com Widgets “longes”
State Management
Gerenciamento de Estado
- Prover um estado centralizado
- Comunicação unilateral
- Atualização de múltiplos Widgets
State Management
Estado Centralizado
- Todos Widgets ouvem da mesma
fonte
- Publish/Subscribe
- Atualização de múltiplos Widdgets
Cenário 3
Múltiplas interfaces
- Uma UI para Android
- Uma UI para iOS
- Compartilhar o mesmo código
BLoC
Centralização da Regra de
Negócio
- Múltiplas interfaces
- Mesmo código
BLoC
class CartBloc extends ChangeNotifier {
var cart = new List<CartItemModel>();
double total = 0;
get() {
return cart;
}
add(CartItemModel item) {
cart.add(item);
calculateTotal();
}
...
BLoC
remove(CartItemModel item) {
cart.removeWhere((x) => x.id == item.id);
calculateTotal();
}
itemInCart(CartItemModel item) {
var result = false;
cart.forEach((x) {
if (item.id == x.id) result = true;
});
return result;
}
BLoC
increase(CartItemModel item) {
if (item.quantity < 10) {
item.quantity++;
calculateTotal();
}
}
decrease(CartItemModel item) {
if (item.quantity > 1) {
item.quantity--;
calculateTotal();
}
}
BLoC
calculateTotal() {
total = 0;
cart.forEach((x) {
total += (x.price * x.quantity);
});
notifyListeners();
}
Cenário 4
Singleton e DI
- O mesmo BLoC para todo o App
Provider
Gerenciamento de Dependências
- Obter sempre o mesmo objeto
- Poder criar e resolver dependências em Widgets
Provider
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MultiProvider(
providers: [
ChangeNotifierProvider<CartBloc>.value(
value: CartBloc(),
),
...
Provider
class CartPage extends StatelessWidget {
var bloc;
final price = new NumberFormat("#,##0.00", "pt_BR");
var items = new List<CartItemModel>();
@override
Widget build(BuildContext context) {
bloc = Provider.of<CartBloc>(context);
items = bloc.cart;
return Scaffold(
body: Container(
...
Cenário 4
Notificações
- Publish/Subscribe
- Notificar vários Widgets
Notificação
Notificando os Widgets
- notifyListners()
- Streams
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();
}
...
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?
SORTEIO
5 FORMAÇÕES COMPLETAS
FLUTTER
https://go.balta.io/fluttertalks
Dúvidas?
hello@balta.io
hello@balta.io
https://balta.io/

Mais conteúdo relacionado

Semelhante a 31/08/2019 - Flutter Talks

Comunidades Baseadas Em Subsites
Comunidades Baseadas Em SubsitesComunidades Baseadas Em Subsites
Comunidades Baseadas Em Subsitesalessandrolandim
 
LambdaDay: Backbone.js
LambdaDay: Backbone.jsLambdaDay: Backbone.js
LambdaDay: Backbone.jsGiovanni Bassi
 
LPII_Aula_7-JQuery.pdf
LPII_Aula_7-JQuery.pdfLPII_Aula_7-JQuery.pdf
LPII_Aula_7-JQuery.pdfGabrielaMota46
 
Meu projeto final - Neobase 2.0
Meu projeto final - Neobase 2.0Meu projeto final - Neobase 2.0
Meu projeto final - Neobase 2.0Saulo Vallory
 
JQuery Alagoinhas Dev Day - UNEB
JQuery Alagoinhas Dev Day - UNEBJQuery Alagoinhas Dev Day - UNEB
JQuery Alagoinhas Dev Day - UNEBLuciano Borges
 
Desenvolvendo com Silverlight para WP7 Mango [Update]
Desenvolvendo com Silverlight para WP7 Mango [Update]Desenvolvendo com Silverlight para WP7 Mango [Update]
Desenvolvendo com Silverlight para WP7 Mango [Update]Felipe Pimentel
 
Desvendando as ferramentas e serviços para o desenvolvedor Android
Desvendando as ferramentas e serviços para o desenvolvedor AndroidDesvendando as ferramentas e serviços para o desenvolvedor Android
Desvendando as ferramentas e serviços para o desenvolvedor Androidjoaobmonteiro
 
jQuery - Visão Geral
jQuery - Visão GeraljQuery - Visão Geral
jQuery - Visão GeralKaio Valente
 
Domain Driven Design (DDD) - DevIsland, BH
Domain Driven Design (DDD) - DevIsland, BHDomain Driven Design (DDD) - DevIsland, BH
Domain Driven Design (DDD) - DevIsland, BHGiovanni Bassi
 
O fantástico mundo de Android
O fantástico mundo de AndroidO fantástico mundo de Android
O fantástico mundo de AndroidSuelen Carvalho
 
jQuery Mobile - Aplicações móveis com Javascript
jQuery Mobile - Aplicações móveis com JavascriptjQuery Mobile - Aplicações móveis com Javascript
jQuery Mobile - Aplicações móveis com JavascriptLuiz Oliveira
 
Programando para programadores: Desafios na evolução de um Framework
Programando para programadores: Desafios na evolução de um FrameworkProgramando para programadores: Desafios na evolução de um Framework
Programando para programadores: Desafios na evolução de um FrameworkPablo Dall'Oglio
 

Semelhante a 31/08/2019 - Flutter Talks (20)

Webinar Magento Commerce
Webinar Magento Commerce Webinar Magento Commerce
Webinar Magento Commerce
 
Comunidades Baseadas Em Subsites
Comunidades Baseadas Em SubsitesComunidades Baseadas Em Subsites
Comunidades Baseadas Em Subsites
 
LambdaDay: Backbone.js
LambdaDay: Backbone.jsLambdaDay: Backbone.js
LambdaDay: Backbone.js
 
DDD > Experiências
DDD > ExperiênciasDDD > Experiências
DDD > Experiências
 
Wicket 2008
Wicket 2008Wicket 2008
Wicket 2008
 
LPII_Aula_7-JQuery.pdf
LPII_Aula_7-JQuery.pdfLPII_Aula_7-JQuery.pdf
LPII_Aula_7-JQuery.pdf
 
Meu projeto final - Neobase 2.0
Meu projeto final - Neobase 2.0Meu projeto final - Neobase 2.0
Meu projeto final - Neobase 2.0
 
JQuery Alagoinhas Dev Day - UNEB
JQuery Alagoinhas Dev Day - UNEBJQuery Alagoinhas Dev Day - UNEB
JQuery Alagoinhas Dev Day - UNEB
 
Desenvolvendo com Silverlight para WP7 Mango [Update]
Desenvolvendo com Silverlight para WP7 Mango [Update]Desenvolvendo com Silverlight para WP7 Mango [Update]
Desenvolvendo com Silverlight para WP7 Mango [Update]
 
Desvendando as ferramentas e serviços para o desenvolvedor Android
Desvendando as ferramentas e serviços para o desenvolvedor AndroidDesvendando as ferramentas e serviços para o desenvolvedor Android
Desvendando as ferramentas e serviços para o desenvolvedor Android
 
jQuery - Visão Geral
jQuery - Visão GeraljQuery - Visão Geral
jQuery - Visão Geral
 
Domain Driven Design (DDD) - DevIsland, BH
Domain Driven Design (DDD) - DevIsland, BHDomain Driven Design (DDD) - DevIsland, BH
Domain Driven Design (DDD) - DevIsland, BH
 
Kotlin first
Kotlin firstKotlin first
Kotlin first
 
Entendento Arquitetura MVI + Flow
Entendento Arquitetura MVI + FlowEntendento Arquitetura MVI + Flow
Entendento Arquitetura MVI + Flow
 
Desenvolvimento iOS
Desenvolvimento iOSDesenvolvimento iOS
Desenvolvimento iOS
 
Jquery a technical overview
Jquery a technical overviewJquery a technical overview
Jquery a technical overview
 
O fantástico mundo de Android
O fantástico mundo de AndroidO fantástico mundo de Android
O fantástico mundo de Android
 
jQuery Mobile - Aplicações móveis com Javascript
jQuery Mobile - Aplicações móveis com JavascriptjQuery Mobile - Aplicações móveis com Javascript
jQuery Mobile - Aplicações móveis com Javascript
 
Aplicacoes Rapidas Para Web Com Django
Aplicacoes Rapidas Para Web Com DjangoAplicacoes Rapidas Para Web Com Django
Aplicacoes Rapidas Para Web Com Django
 
Programando para programadores: Desafios na evolução de um Framework
Programando para programadores: Desafios na evolução de um FrameworkProgramando para programadores: Desafios na evolução de um Framework
Programando para programadores: Desafios na evolução de um Framework
 

Mais de Andre Baltieri

Clean Code - Promob DevDay 2022
Clean Code - Promob DevDay 2022Clean Code - Promob DevDay 2022
Clean Code - Promob DevDay 2022Andre Baltieri
 
Refatorando para Testes de Unidade
Refatorando para Testes de UnidadeRefatorando para Testes de Unidade
Refatorando para Testes de UnidadeAndre Baltieri
 
Criando APIs com Node e TypeScript
Criando APIs com Node e TypeScriptCriando APIs com Node e TypeScript
Criando APIs com Node e TypeScriptAndre Baltieri
 
Otimizando seu cenário de APIs
Otimizando seu cenário de APIsOtimizando seu cenário de APIs
Otimizando seu cenário de APIsAndre Baltieri
 
Turbine sua API no Microsoft Azure
Turbine sua API no Microsoft AzureTurbine sua API no Microsoft Azure
Turbine sua API no Microsoft AzureAndre Baltieri
 
Progressive Web Apps: Um novo mundo
Progressive Web Apps: Um novo mundoProgressive Web Apps: Um novo mundo
Progressive Web Apps: Um novo mundoAndre Baltieri
 
ASP.NET Core APIs: Performance Tips
ASP.NET Core APIs: Performance TipsASP.NET Core APIs: Performance Tips
ASP.NET Core APIs: Performance TipsAndre Baltieri
 
Migrando para o Angular 2
Migrando para o Angular 2Migrando para o Angular 2
Migrando para o Angular 2Andre Baltieri
 
Progressive Web Apps e o futuro do desenvolvimento Web na Plataforma .NET
Progressive Web Apps e o futuro do desenvolvimento Web na Plataforma .NETProgressive Web Apps e o futuro do desenvolvimento Web na Plataforma .NET
Progressive Web Apps e o futuro do desenvolvimento Web na Plataforma .NETAndre Baltieri
 
Otimizando eu JavaScript com TypeScript
Otimizando eu JavaScript com TypeScriptOtimizando eu JavaScript com TypeScript
Otimizando eu JavaScript com TypeScriptAndre Baltieri
 
Angular 2, TypeScript e Além
Angular 2, TypeScript e AlémAngular 2, TypeScript e Além
Angular 2, TypeScript e AlémAndre Baltieri
 
Introdução ao Native Script
Introdução ao Native ScriptIntrodução ao Native Script
Introdução ao Native ScriptAndre Baltieri
 
Criando aplicações Híbridas com AngularJs, TypeScript e Material Design
Criando aplicações Híbridas com AngularJs, TypeScript e Material DesignCriando aplicações Híbridas com AngularJs, TypeScript e Material Design
Criando aplicações Híbridas com AngularJs, TypeScript e Material DesignAndre Baltieri
 
Trabalhando com WebHooks no ASP.NET
Trabalhando com WebHooks no ASP.NETTrabalhando com WebHooks no ASP.NET
Trabalhando com WebHooks no ASP.NETAndre Baltieri
 
Microsoft e o mundo do Desenvolvimento
Microsoft e o mundo do DesenvolvimentoMicrosoft e o mundo do Desenvolvimento
Microsoft e o mundo do DesenvolvimentoAndre Baltieri
 
5509 segurança em ap is
5509   segurança em ap is5509   segurança em ap is
5509 segurança em ap isAndre Baltieri
 

Mais de Andre Baltieri (20)

Clean Code - Promob DevDay 2022
Clean Code - Promob DevDay 2022Clean Code - Promob DevDay 2022
Clean Code - Promob DevDay 2022
 
Refatorando para Testes de Unidade
Refatorando para Testes de UnidadeRefatorando para Testes de Unidade
Refatorando para Testes de Unidade
 
PWA: State of Art
PWA: State of ArtPWA: State of Art
PWA: State of Art
 
PWAs no seu Desktop
PWAs no seu DesktopPWAs no seu Desktop
PWAs no seu Desktop
 
Criando APIs com Node e TypeScript
Criando APIs com Node e TypeScriptCriando APIs com Node e TypeScript
Criando APIs com Node e TypeScript
 
Otimizando seu cenário de APIs
Otimizando seu cenário de APIsOtimizando seu cenário de APIs
Otimizando seu cenário de APIs
 
Turbine sua API no Microsoft Azure
Turbine sua API no Microsoft AzureTurbine sua API no Microsoft Azure
Turbine sua API no Microsoft Azure
 
Progressive Web Apps: Um novo mundo
Progressive Web Apps: Um novo mundoProgressive Web Apps: Um novo mundo
Progressive Web Apps: Um novo mundo
 
ASP.NET Core APIs: Performance Tips
ASP.NET Core APIs: Performance TipsASP.NET Core APIs: Performance Tips
ASP.NET Core APIs: Performance Tips
 
Progressive Web Apps
Progressive Web AppsProgressive Web Apps
Progressive Web Apps
 
Migrando para o Angular 2
Migrando para o Angular 2Migrando para o Angular 2
Migrando para o Angular 2
 
Progressive Web Apps e o futuro do desenvolvimento Web na Plataforma .NET
Progressive Web Apps e o futuro do desenvolvimento Web na Plataforma .NETProgressive Web Apps e o futuro do desenvolvimento Web na Plataforma .NET
Progressive Web Apps e o futuro do desenvolvimento Web na Plataforma .NET
 
BaaS com Firebase 3
BaaS com Firebase 3BaaS com Firebase 3
BaaS com Firebase 3
 
Otimizando eu JavaScript com TypeScript
Otimizando eu JavaScript com TypeScriptOtimizando eu JavaScript com TypeScript
Otimizando eu JavaScript com TypeScript
 
Angular 2, TypeScript e Além
Angular 2, TypeScript e AlémAngular 2, TypeScript e Além
Angular 2, TypeScript e Além
 
Introdução ao Native Script
Introdução ao Native ScriptIntrodução ao Native Script
Introdução ao Native Script
 
Criando aplicações Híbridas com AngularJs, TypeScript e Material Design
Criando aplicações Híbridas com AngularJs, TypeScript e Material DesignCriando aplicações Híbridas com AngularJs, TypeScript e Material Design
Criando aplicações Híbridas com AngularJs, TypeScript e Material Design
 
Trabalhando com WebHooks no ASP.NET
Trabalhando com WebHooks no ASP.NETTrabalhando com WebHooks no ASP.NET
Trabalhando com WebHooks no ASP.NET
 
Microsoft e o mundo do Desenvolvimento
Microsoft e o mundo do DesenvolvimentoMicrosoft e o mundo do Desenvolvimento
Microsoft e o mundo do Desenvolvimento
 
5509 segurança em ap is
5509   segurança em ap is5509   segurança em ap is
5509 segurança em ap is
 

31/08/2019 - Flutter Talks

Notas do Editor

  1. Abertura // instrudução
  2. Tela de apresentação do curso