Flutter. Como atualizar seu BLoC

Existem muitas bibliotecas que implementam o padrão BLoC. Mas aquele sobre o qual vou falar é incomum e se chama isolate_bloc.



Como o nome indica, este é algum tipo de bloco incomum e sua peculiaridade é que ele funciona em um Isolate separado (doravante isolado) e não desacelera sua IU.



Qual é o problema com um bloco regular?



Além do clichê, há mais um problema - ele funciona no thread principal, portanto, tarefas pesadas, como analisar json, podem causar congelamentos na IU.



Bibliotecas como simple_bloc ou cubit podem ajudar com o primeiro problema. Do segundo - isolar, ou um invólucro sobre ele - Compute. Em princípio, essa é uma combinação realmente boa que muitas pessoas usam, mas mesmo assim não resolve todos os problemas. Por exemplo, você não pode trabalhar com MethodChannel isoladamente e, em princípio, seu uso está associado a inconveniências e um boiler plate.



Isolar bloco







Essa biblioteca ajuda a usar o padrão BLoC e resolve uma série de tarefas, como trabalhar com isolados e MessageChannels. Além disso, permite reduzir a quantidade de código ao escrever o próprio bloco.



Como usá-lo?



Para entender como trabalhar com esta biblioteca, vejamos um exemplo simples.



Apesar de eu ter tentado descrever tudo em detalhes, algo pode permanecer incompreensível, então presume-se que você já esteja familiarizado com o padrão BLoC.



Qualquer projeto de vibração começa com um contador, então vamos começar com ele também. O primeiro passo é escrever o próprio bloco.







Na linha 3, criamos uma classe CounterBloc que herda da classe IsolateBloc. Aqui indicamos o tipo de eventos e estados do nosso bloco.



Na linha 4, passamos o estado inicial do contador - 0.



Das linhas 6 a 9, substituímos o método onEventReceived, que é chamado quando um novo evento é recebido. State é um getter que retorna o último estado que o bloco enviou para a IU.



Na linha 8, usamos a função emit, que pega o estado e o envia para a IU.



Agora você precisa registrar o bloco.



Uma vez que funciona em um isolamento separado, não podemos criá-lo diretamente. Portanto, você precisa informar a biblioteca sobre sua existência usando a função de registro.







Na linha 5, inicializamos a biblioteca e passamos uma função que será executada em blocos isolados e de registro.



Na linha 10, registramos o CounterBloc - agora a biblioteca poderá criá-lo a nosso pedido.



Resta apenas descrever a IU!







Na linha 8, criamos um bloco e o adicionamos à árvore de widgets.



Na linha 23, ouvimos o estado do bloco. IsolateBlocBuilder funciona como StreamBuilder, mas é capaz de encontrar o bloco na própria árvore do widget.



Das linhas 31 a 33, usamos o método de extensão isolateBloc <Bloc, State> () para obter o bloco do contexto e usamos a função add () para adicionar um novo evento a ele.



Isso é tudo, agora você pode começar!



O final



Usando um exemplo básico, mostrei como trabalhar com esta biblioteca e, para um estudo mais aprofundado, aconselho você a olhar sua página no github . Todas as funcionalidades são descritas lá e existem exemplos mais complexos.



All Articles