Gostei muito da aula, a única coisa que sempre me incomoda nas aulas do youtube é vcs falarem: "poderíamos fazer isso" e n fazer, ainda mais pra exemplos reais q acontecem muito como a questão de error e loading. Não me importo que aula mude de 35min pra 1h se eu terei todo o conhecimento necessário ali pra fazer algo bem feito.
Entendo sua questão, porém, se faz vídeos de uma hora, muitos não irão ver, consequentemente o engajamento cai, logo o RUclips não entrega, sendo assim, desanima o criador e por isso não rola fazer
Pude rever a aula com calma e essa abordagem de ensinar o Bloc sem nenhum package, só no conceito foi um divisor de águas no meu entendimento do padrão, muito obrigado professor, vou sim estudar mais sobre esse padrão que é tão requisitado pelas empresas.
Obrigado pelo comentário Rafael!!!! É a melhor coisa mesmo, tentar entender como estes padrões funcionam, pois no fundo os packages geralmente são abstrações ou implementações deles 👍
Caraca ai sim tava precisando dessa aula na empresa que estou atualmente la é bloc e tava precisando de conteudo atualizado! vc é fera professor. Obrigado!!!
Sou dev IOS nativo mas também trabalhei com React e RN por 3 anos e apareceu um app para dar manutenção de um cliente em Flutter e tô dando uma estudada. Mas na boa, me parece um bagui de maluco, complexidade gigantesca pra fazer para implementar um CRUD básico. Código verboso demais, um role enorme.
Que aula! Já trabalho com flutter_bloc, mas ver implementação de bloc puro, depois só com packge bloc até chegar no bloc com flutter_bloc foi muito bom.
Geralmente n uso classe que estende um estado genérico, eu crio uma classe coloco as variáveis dentro e um método copyWith, na minha cabeça fica mais organizado e mais fácil de trabalhar.
@Alisson Araujo, sei que já há 1 ano desde a publicação, mas é um ótimo conteúdo e ainda muito relevante: Gerenciamento de Estado no Flutter com GetX e Provider - ruclips.net/video/OTBR40yevG4/видео.html
Muito obrigado por essa aula, professor. O senhor é muito didático, comecei essa semana uma vaga de estagiário em desenvolvimento flutter e na empresa eles usam Bloc, e eu to bastante perdido lkkkkkk, obrigado por me ajudar a ter uma luz.
excelente conteudo, eu tenho preguiça de gerenciamento de estado, mas a forma que explicou me fez interessar, preciso me aprimorar nesse sentido, agradeço e vou usar o conhecimento
Ótima a aula, estava preso tentando entender melhor sobre BloC, mas ainda ficou uma dúvida no ar para mim. Como faria caso precisasse utilizar mais de um BloC na aplicação, ou uma aplicação com múltiplas telas e diferentes BloC para cada tela trabalhando em conjunto?
Faz uma aula ensinando como usar Flutter_bloc para atualizar dados entre telas usando navegação com push e pop. Tipo, da tela A mando um Id para tela B, que por sua vez chama e constrói um bloc state com os dados do usuário. Sempre tenho problemas do estado vir desatualizado e as vezes repetir varias vezes.
muito top a aula, entendi bastante sobre o bloc. Tenho uma dúvida, sobre os estados de error e loading, o chaveamento seria na view mesmo ou posso criar tipo uma viewController para gerenciar esses estados e deixar a view somente como view sem logica.
Olá, uma duvida, aos 12:25 você fala que o código da linha quatro pegaria usando provider. Da para pegar uma instancia do provider de fora de um widget? pq nesse caso de onde viria a instancia do BuildContext para fazer o Provider.of(context) ?
Se você executar o Provider no runApp você consegue fazer isso 👍. Caso contrário, sem o context, você precisaria de alguma solução que não utiliza o BuildContext. Também, se for um app mais simples, você poderia usar o ClientRepository como um singleton
Obrigado, @@drantunes. Eu olhei alguns de seus vídeos e acabei achando um que você mostra suas extensões. Agora estou com o ambiente parecido com o seu c:
Ótimo vídeo! Deu pra sacar bastante essa parade de block aí... Aliás, alguém sabe o nome da extensão que mostra os erros direto na linha? Igual do professor
Olá prof. Diego, tudo bem? O Signal seria um substituto adequado para o BLoC? Entendo que é importante visto organização e também por se tratar de um padrão, porém achei pouco produtivo em termos de quantidade de arquivos e classes criadas. Existe alternativa menos complexa e com potencial de benefícios similar? Ou seria esta a melhor prática de mercado?
Pode ser um substituto sim, mas os signals são apenas a reatividade... neste caso, você precisa estabelecer um padrão para a interface. O BLoC te dá isso ;)
Sobre mercado varia de cada empresa... o BLoC é mais usado muito por ser o mais antigo... Tem também o combo ChangeNotifier + Provider, MobX ou Riverpod.
Estava revendo e fiquei pensando na parte que você falou de captura de erro, eu não faço ideia de como aplicar, seria chamar um evento de erro no lugar de um [ ] vazio do snapshot? minuto 22:47
Você poderia criar um novo state de erro. Quando esse erro ocorrer, o BLoC irá enviar o state de erro para a view. E lá você faz o tratamento, por exemplo, mostrando alguma mensagem com o erro 👍
@@drantunes O que fica meio abstrato pra mim, é que eu não vi nada sendo retornado em ClientSuccessState, se fosse criar da mesma forma, eu não saberia como criar, o que colocar. Não é a estrutura, é o que colocar na função, eu nunca sei. No mapEvent passa um evento de erro também no else if e depois um output com erro?
@@drantunes foi mais ou menos o que eu fiz. No git tem apenas 1 commit, então imaginei que vc mandou o projeto pronto. Nao tinha histórico. Para voltar ao início eu apaguei a pasta bloc/ e deu para refazer a clients_page através do vídeo. grato
Na prática o pessoal geralmente cria um por tela ou por feature. Mas nada impede de você ter um bloc que seja usado em várias telas. A questão principal é ter os eventos como input e um state como output.
Olá professor, tudo joia ? Caso eu esteja usando o Bloc junto do get it, onde tenho um fluxo e desejo fazer o dispose dele no final desse fluxo, por exemplo um onboarding ou cadastro. Instanciaria como uma factory e daria o dispose do Bloc na ultima tela do fluxo ? Como funcionaria ? Outra dúvida, caso eu use um Bloc por toda aplicação, qual seria a melhor de formar de dar um dispose geral em todas blocs, ao fazer Log Out.
@@drantunes Professor surgiu outra dúvida, não há como ter mais de uma property em um state do bloc, por exemplo endereço, dados pessoais, onde cada um seria complementado em duas telas diferentes eu teria que criar um bloc para cada ? Ou tem alguma abordagem para manter elas juntar em "Bloc Person" com copywith ou algo semelhante
Ainda tenho duvida quando tenho de tratar com dois provedores: imagina que eu tenha que carregar uma lista de clientes e uma lista de carros. E alguns componentes precisam verificar ambos os loadings das duas operações, que ao meu ver poderiam ser dois blocs. Como proceder? fico em duvida
Precisa pensar na modelagem dos dados. Se há um relacionamento de clientes e carros, e você precisa desta informação, pode criar um repositório que agregue esses dados. Pense nos estados do BLoC como "fotos" da sua tela em diferentes momentos (sem dados, carregando, com dados, com erro, etc). Como os dados serão modelados, estruturados e carregados serão de responsabilidade de outra classe ou camada ;)
Professor, se os dados viessem de uma API externa, ao adicionar um cliente a lista seria automaticamente atualizada ou teria que fazer um novo load? E se sim qual a melhor forma de fazer isso?
A forma tradicional de fazer seria um novo loading, mas a melhor estratégia é usar um cache em memória dos dados (e.g. em uma lista). Assim, você mostra um loading para o cliente e após sucesso na API, você salva apenas o dado inserido na lista.
Professor, teria como disponibilizar o codigo utilizado no video? Para dá uma estudada no padrão, pois ele possui tantas caracteristicas que a gente acaba se perdendo kkkkk
Poxa eu não consegui acompanhar, o vídeo já começou com algumas partes dos códigos já prontos e eu não consegui ver. Eu estava conseguindo acompanhar melhor quando pegava pra fazer do zero na hora :(
@@drantunes estava usando o bloc pattern professor, ele fiz que esse meu bloc não está na árvore de Widgets tentando instanciar ele em uma função estática
@@cledilsonprogramador Não deveria dar erro de toda forma, a menos que você esteja usando alguma widget que precise do context (neste caso você não o teria mesmo na árvore). O que pode fazer é definir uma variável const para esse bloc e compartilhar ele via import.
Tenho uma limitação, que acredito ser de ordem psicológica, muito grande em entender bloc. Honestamente não me sinto confortável. Já tentei de diversas maneira me dar a chance de entender melhor mais parece que a cada vez, só complica!
A forma mais simples de entender o conceito é que ao invés de você manipular uma variável (state), por exemplo, um counter, você irá enviar continuamente um State (dentro desse state você pode ter propriedades, como o counter). Como é utilizada uma stream para enviar os dados de forma contínua, é importante ter outros states como um InitialState. As operações neste state também não são diretas, mas por meio de eventos (IncrementCounter, DecrementCounter, etc). State e Event são classes e, dentro delas, é que você irá realizar as operações. Espero ter ajudado
Obrigado Anderson!!! As aulas na universidade são apenas para os alunos. Por isso criei este canal pessoal: para levar ao público também conhecimentos sobre Flutter 👍. Você está procurando um curso sobre Flutter?
Bem complexo o entendimento do bloc, mostrando a arquitetura e depois a explicação acredito que seria mais facil compartilhar o conhecimento, mas de qualquer maneira parabéns pela didática.
Gostei muito da aula, a única coisa que sempre me incomoda nas aulas do youtube é vcs falarem: "poderíamos fazer isso" e n fazer, ainda mais pra exemplos reais q acontecem muito como a questão de error e loading. Não me importo que aula mude de 35min pra 1h se eu terei todo o conhecimento necessário ali pra fazer algo bem feito.
Entendo sua questão, porém, se faz vídeos de uma hora, muitos não irão ver, consequentemente o engajamento cai, logo o RUclips não entrega, sendo assim, desanima o criador e por isso não rola fazer
Pude rever a aula com calma e essa abordagem de ensinar o Bloc sem nenhum package, só no conceito foi um divisor de águas no meu entendimento do padrão, muito obrigado professor, vou sim estudar mais sobre esse padrão que é tão requisitado pelas empresas.
Obrigado pelo comentário Rafael!!!! É a melhor coisa mesmo, tentar entender como estes padrões funcionam, pois no fundo os packages geralmente são abstrações ou implementações deles 👍
Bloc é o melhor gerenciador de estado que existe até o momento!
Bom demais! Deu pra entender perfeitamente, professor! O complicado é achar vaga de Flutter pra Júnior kakakaka
Caraca ai sim tava precisando dessa aula na empresa que estou atualmente la é bloc e tava precisando de conteudo atualizado! vc é fera professor. Obrigado!!!
Valeu Matheus!!! Sucesso na sua empresa aí!!! 🚀
Sou dev IOS nativo mas também trabalhei com React e RN por 3 anos e apareceu um app para dar manutenção de um cliente em Flutter e tô dando uma estudada. Mas na boa, me parece um bagui de maluco, complexidade gigantesca pra fazer para implementar um CRUD básico.
Código verboso demais, um role enorme.
Dependendo do projeto será verboso sim, mas pode ser mais funcional se quiser ;)
tive a mesma impressão estudando flutter, uma cacetada de código pra fazer algo básico
Que aula! Já trabalho com flutter_bloc, mas ver implementação de bloc puro, depois só com packge bloc até chegar no bloc com flutter_bloc foi muito bom.
Obrigado João!!!
Geralmente n uso classe que estende um estado genérico, eu crio uma classe coloco as variáveis dentro e um método copyWith, na minha cabeça fica mais organizado e mais fácil de trabalhar.
Parabéns pelo conteúdo, é muito bom para a comunidade ter acesso a aulas tão objetivas.
Obrigado Antônio!
Muito bom, agora só preciso assistir mais 5 vezes. =)
Muito bom, aguardando um guia de getx também, like!
@Alisson Araujo, sei que já há 1 ano desde a publicação, mas é um ótimo conteúdo e ainda muito relevante: Gerenciamento de Estado no Flutter com GetX e Provider - ruclips.net/video/OTBR40yevG4/видео.html
Muito obrigado por essa aula, professor. O senhor é muito didático, comecei essa semana uma vaga de estagiário em desenvolvimento flutter e na empresa eles usam Bloc, e eu to bastante perdido lkkkkkk, obrigado por me ajudar a ter uma luz.
Valeu 👍 vai conseguir pegar logo!!!!
Que coincidência boa, comecei ontem a fazer o curso de Bloc do Flutterly e esse conteúdo mais atualizado e em português vai me ajudar muito!
Aproveitando, qual o nome dessa extensão que faz você criar o arquivo direto do command palett no vscode?
Valeu Rafael! Bons estudos aí 👍
@@KuroManX Advanced New File 😉
muito bom... obrigado pela excelente explicação
Enfim encontrei a aula certa... eu tinha certeza que com o Diego ficaria facil entender esse assunto!
Que bom que ajudou!! Grande abraço!
Entendi BLoC muchisimas gracias Profesor!!!
Sua didática é 10!
Valeu Rafael!!!!
Parabéns, excelente aula e didática!
excelente conteudo, eu tenho preguiça de gerenciamento de estado, mas a forma que explicou me fez interessar, preciso me aprimorar nesse sentido, agradeço e vou usar o conhecimento
Espero ter ajudado!! Desejo sucesso !!
Era tudo o que eu estava precisando cara kk, ótima aborgagem, deu pra entender tudo, muito obrigado!!
Muito bacana esse material. Parabéns! Ficou bem didático.
Valeu Guilherme 👍🙏
Obrigada professor!!! Sanou diversas dúvidas!
Valeu Debora 👍😎
Explicou de um jeito super simples que eu entendi, muito obrigadoo
Obrigado pelo vídeo. Foi bem didático !
Valeu Charles!!!
Se aprender é massa, com professor fica melhor ainda, parabéns pelo conteúdo!
Muito obrigado Rodrigo! E bom estudo 🚀
@@drantunes Professor, poderia trazer mais conteudos sobre banco de dados e drift, coisas tipo como exportar depois de salvo, etc
@@rdrgbaioco Vou pensar aqui em algumas formas de abordar o tema!!!
Ótima abordagem e didática. Obrigado professor.
Disponha!
Obrigado, professor.
sensacional
Top demais
Aula sensacional
Obrigado 😃
Boa! É isso que tava faltando
Valeu Rodrigo 👍😎
Ótima a aula, estava preso tentando entender melhor sobre BloC, mas ainda ficou uma dúvida no ar para mim. Como faria caso precisasse utilizar mais de um BloC na aplicação, ou uma aplicação com múltiplas telas e diferentes BloC para cada tela trabalhando em conjunto?
Terá mais BLoCs e usara o provider para gerenciar as dependências
top prof 🔝🔝🔝
Faz uma aula ensinando como usar Flutter_bloc para atualizar dados entre telas usando navegação com push e pop. Tipo, da tela A mando um Id para tela B, que por sua vez chama e constrói um bloc state com os dados do usuário. Sempre tenho problemas do estado vir desatualizado e as vezes repetir varias vezes.
Obrigado pela sugestão!
muito top a aula, entendi bastante sobre o bloc. Tenho uma dúvida, sobre os estados de error e loading, o chaveamento seria na view mesmo ou posso criar tipo uma viewController para gerenciar esses estados e deixar a view somente como view sem logica.
Pode fazer direto na View com o BlocBuilder 👍
@@drantunes massa, obrigado por responder:)
professor, uma duvida simples, no minuto 32:34 o seu vscode fechou as chaves {} automaticamente é um plugin ou configuração do vscode?
Era um plugin: autoclose brackets senão me engano
Olá, uma duvida, aos 12:25 você fala que o código da linha quatro pegaria usando provider. Da para pegar uma instancia do provider de fora de um widget? pq nesse caso de onde viria a instancia do BuildContext para fazer o Provider.of(context) ?
Se você executar o Provider no runApp você consegue fazer isso 👍. Caso contrário, sem o context, você precisaria de alguma solução que não utiliza o BuildContext. Também, se for um app mais simples, você poderia usar o ClientRepository como um singleton
Eu to começando com o Flutter agora, e adorei essa IDE.
Alguém poderia me dizer qual ele ta usando?
Estou usando o VSCode mesmo!
Obrigado, @@drantunes.
Eu olhei alguns de seus vídeos e acabei achando um que você mostra suas extensões.
Agora estou com o ambiente parecido com o seu c:
Ótimo vídeo! Deu pra sacar bastante essa parade de block aí...
Aliás, alguém sabe o nome da extensão que mostra os erros direto na linha? Igual do professor
Error Lens 😀
Conteúdo Bacana, o que vc acha da extensão Equatable com o bloc ?
Valeu! Não vejo vantagem em utilizar, acredito que faça mais sentido com Entities e Models 👍
Olá prof. Diego, tudo bem? O Signal seria um substituto adequado para o BLoC? Entendo que é importante visto organização e também por se tratar de um padrão, porém achei pouco produtivo em termos de quantidade de arquivos e classes criadas. Existe alternativa menos complexa e com potencial de benefícios similar? Ou seria esta a melhor prática de mercado?
Pode ser um substituto sim, mas os signals são apenas a reatividade... neste caso, você precisa estabelecer um padrão para a interface. O BLoC te dá isso ;)
Sobre mercado varia de cada empresa... o BLoC é mais usado muito por ser o mais antigo... Tem também o combo ChangeNotifier + Provider, MobX ou Riverpod.
Estava revendo e fiquei pensando na parte que você falou de captura de erro, eu não faço ideia de como aplicar, seria chamar um evento de erro no lugar de um [ ] vazio do snapshot? minuto 22:47
Você poderia criar um novo state de erro. Quando esse erro ocorrer, o BLoC irá enviar o state de erro para a view. E lá você faz o tratamento, por exemplo, mostrando alguma mensagem com o erro 👍
@@drantunes O que fica meio abstrato pra mim, é que eu não vi nada sendo retornado em ClientSuccessState, se fosse criar da mesma forma, eu não saberia como criar, o que colocar. Não é a estrutura, é o que colocar na função, eu nunca sei. No mapEvent passa um evento de erro também no else if e depois um output com erro?
Qual modelo vc acha mais interessante de trabalhar o Bloc ou o MVVM?
Depende do projeto, mas mvvm funciona bem no mobile
valeu!
Diego vc não tem o projeto inicial no git para codar acompanhando o tutorial?
Projeto inicial não, mas pode pegar pelo histórico no git
@@drantunes foi mais ou menos o que eu fiz.
No git tem apenas 1 commit, então imaginei que vc mandou o projeto pronto. Nao tinha histórico.
Para voltar ao início eu apaguei a pasta bloc/ e deu para refazer a clients_page através do vídeo.
grato
Uma pergunta Diego, bloc é sempre vinculado a uma tela, ou seja reaproveitamento de bloc/cubit para telas distintas poderia ser uma boa prática???
Na prática o pessoal geralmente cria um por tela ou por feature. Mas nada impede de você ter um bloc que seja usado em várias telas. A questão principal é ter os eventos como input e um state como output.
Olá professor, tudo joia ?
Caso eu esteja usando o Bloc junto do get it, onde tenho um fluxo e desejo fazer o dispose dele no final desse fluxo, por exemplo um onboarding ou cadastro.
Instanciaria como uma factory e daria o dispose do Bloc na ultima tela do fluxo ?
Como funcionaria ?
Outra dúvida, caso eu use um Bloc por toda aplicação, qual seria a melhor de formar de dar um dispose geral em todas blocs, ao fazer Log Out.
Você pode criar uma widget na raiz para cuidar dessas dependências. No dispose da widget você pode fazer o dispose dos blocs
@@drantunes Professor surgiu outra dúvida, não há como ter mais de uma property em um state do bloc, por exemplo endereço, dados pessoais, onde cada um seria complementado em duas telas diferentes eu teria que criar um bloc para cada ?
Ou tem alguma abordagem para manter elas juntar em "Bloc Person" com copywith ou algo semelhante
@@EdsonVanderlei-p7e sim, cria um bloc que contem um objeto User por exemplo como dados.
@@drantunes por exemplo dentro deste user contém Address and Contact que serão pegos em pages diferentes.
Como seria a abordagem ?
Showww!
mto bom
Ainda tenho duvida quando tenho de tratar com dois provedores: imagina que eu tenha que carregar uma lista de clientes e uma lista de carros. E alguns componentes precisam verificar ambos os loadings das duas operações, que ao meu ver poderiam ser dois blocs. Como proceder? fico em duvida
Precisa pensar na modelagem dos dados. Se há um relacionamento de clientes e carros, e você precisa desta informação, pode criar um repositório que agregue esses dados. Pense nos estados do BLoC como "fotos" da sua tela em diferentes momentos (sem dados, carregando, com dados, com erro, etc). Como os dados serão modelados, estruturados e carregados serão de responsabilidade de outra classe ou camada ;)
@@drantunes muito obrigado!
Professor, se os dados viessem de uma API externa, ao adicionar um cliente a lista seria automaticamente atualizada ou teria que fazer um novo load? E se sim qual a melhor forma de fazer isso?
A forma tradicional de fazer seria um novo loading, mas a melhor estratégia é usar um cache em memória dos dados (e.g. em uma lista). Assim, você mostra um loading para o cliente e após sucesso na API, você salva apenas o dado inserido na lista.
Adêdê?
Professor, teria como disponibilizar o codigo utilizado no video? Para dá uma estudada no padrão, pois ele possui tantas caracteristicas que a gente acaba se perdendo kkkkk
Vou colocar na descrição 👍
👏👏👏👏
Aos 26:30 minutos começa a falar das dependencias
entendi mas na hora de usar me embanano todo, dá um nó na cabeça.
que massa
Bloc funciona com geranciador de estado global ?
Pode funcionar, mas não é o recomendado pela abordagem.
emit() mb?
Não entendi sua dúvida ...
Poxa eu não consegui acompanhar, o vídeo já começou com algumas partes dos códigos já prontos e eu não consegui ver. Eu estava conseguindo acompanhar melhor quando pegava pra fazer do zero na hora :(
Eu utilizo GetX nas minhas aplicações porém várias pessoas falam que o BLoC é melhor para se trabalhar em app’s grande. Isso procede?
As empresas utilizam mais o BLoC ou outras abordagens que são padrões como MobX e Redux.
gank da flutterando
um bloc pode ser instanciado dentro de uma função estática? estou tendo um erro ao tentar fazer isso...
Não deveria dar problema, pois é uma instância como qualquer outra...
@@drantunes estava usando o bloc pattern professor, ele fiz que esse meu bloc não está na árvore de Widgets tentando instanciar ele em uma função estática
E ele está declarado antes do material
@@cledilsonprogramador Não deveria dar erro de toda forma, a menos que você esteja usando alguma widget que precise do context (neste caso você não o teria mesmo na árvore). O que pode fazer é definir uma variável const para esse bloc e compartilhar ele via import.
Tenho uma limitação, que acredito ser de ordem psicológica, muito grande em entender bloc. Honestamente não me sinto confortável. Já tentei de diversas maneira me dar a chance de entender melhor mais parece que a cada vez, só complica!
A forma mais simples de entender o conceito é que ao invés de você manipular uma variável (state), por exemplo, um counter, você irá enviar continuamente um State (dentro desse state você pode ter propriedades, como o counter). Como é utilizada uma stream para enviar os dados de forma contínua, é importante ter outros states como um InitialState. As operações neste state também não são diretas, mas por meio de eventos (IncrementCounter, DecrementCounter, etc). State e Event são classes e, dentro delas, é que você irá realizar as operações. Espero ter ajudado
Finalmente consegui parar pra assistir! Parabéns! Tem alguma forma de ter essas aulas na UTFPR?
Obrigado Anderson!!! As aulas na universidade são apenas para os alunos. Por isso criei este canal pessoal: para levar ao público também conhecimentos sobre Flutter 👍. Você está procurando um curso sobre Flutter?
@@drantunes Isso! Há algum curso na faculdade que aborde flutter?
@@_drumering Bacharelado em Ciência da Computação e Analise e Desencolvimento de Sistemas, na disciplina de Programação de Dispositivos Móveis 👍
@@drantunes Achei que houvesse alguma pós relacionada. Há algum curso que recomende? No mais vou maratonar mais seus vídeos, parabéns pela didática!
@@_drumering Obrigado! Fica de olho aqui no canal que assim que lançar cursos particulares irei avisar aqui no canal 👍
Bem complexo o entendimento do bloc, mostrando a arquitetura e depois a explicação acredito que seria mais facil compartilhar o conhecimento, mas de qualquer maneira parabéns pela didática.
Aula excelente, porém a arquitetura de bloc se utiliza de muitas classes... escreve muito.
Credo cheiro do quase falecido redux