Hive + Getx — Uma combinação poderosa — PARTE 3 — bindStream

Hive + Getx — Uma combinação poderosa — PARTE 3 com bindStream

Fala pessoal!

Vamos para uma outra abordagem com relação ao HIVE e o GETx.

Se você acompanhou o último artigo da série (abaixo)

Hive + Getx — Uma combinação poderosa — PARTE 2

Nós fizemos um Todo utilizando o Getx e tudo está funcionando perfeitamente bem. Porém seria interessante nós utilizarmos um método dos RxTypes chamado bindStream.

O bindstream serve para que nós possamos ligar a nossa propriedade observável em um stream, assim quando houver mudança nos dados do stream, nossa propriedade irá mudar em tempo real, facilitando assim a comunicação entre alguma API e o nosso sistema de um modo automático.

ALTERANDO NOSSO PROJETO

Na nossa parte 2 estávamos fazendo da seguinte forma:
— Criamos uma propriedade de lista de TaskModel, fazia a leitura de todos os dados do hive e fazíamos a associação utilizando o stateMixin com o change, para que a nossa tela fosse informada que havia alterado alguma coisa na propriedade e as devidas alterações eram feitas na tela.

Nossa homeController chama a _buildTasks, que popula nossa lista de task e com o change informa que houve alteração. O mesmo vale para todos os outros métodos onde a gente manipula na lista do todo a linha que queremos, salvamos no hive e informamos para a página.

UTILIZANDO O BINDSTREAM

Para utilizarmos o bindstream, vamos criar uma classe para a manipulação dos dados do hive, que vamos chamar de HiveController. Esse controller é o coração da aplicação e o objeto mais importante, pois ele será responsável por criar o método para iniciar a stream do hive.

O que vamos fazer nesta controller é abrir o nosso box do hive e criar 2 métodos:

1 — o bindHive: será o responsável de transformar seu box em um stream

2 — o firstData: com ele nós vamos fazer a primeira carga de dados na nossa lista e dai pra frente os próprios eventos do hive se atualizam sozinhos pelo stream.

ALTERAÇÃO NA HOMECONTROLLER

Como vamos utilizar o bindStream, não é mais necessário utilizarmos o stateMixin para que nosso controller informe para a nossa página que houve atualização de dados, vamos deixar isso somente sob a responsabilidade do nosso steam. Para isso acontecer, precisamos criar uma propriedade observável para que o nossa pagina possa ver as alterações, pois nesse caso diferente do statemixin será a observância da propriedade que fará com que a página seja atualizada utilizando o widget obx()

Logo de cara já da para ver a diferença do nosso home_controller antigo para esse novo, pois nós não atualizamos mais em nenhum momento nossa propriedade observável do _todoList, nós alteramos a entidade que está dentro do hive , ou adicionamos outro todo ao hive, que vai disparar o bindstream com o novo evento e assim atualiza nossa lista que por fim atualiza nossa página.

MODIFICANDO NOSSA PAGINA

Como nós antes utilizávamos o conceito de statemixin com o controller.obx, agora precisamos alterar nossa página para que ele comece a responder pelo widget Obx(), assim quando alguma alteração for feita no controller, a nossa página será avisada, e o que estiver dentro de um obx será atualizado.

Além disso coloquei um widget chamado Visibility para que a nossa lista possa ficar com uma mensagem diferente quando não tem nenhum tipo de dado e não fique uma tela em branco parecendo algum tipo de erro. No Visibility, você pode colocar um widget, e uma condição para que ele apareça e também um outro widget que irá aparecer até que essa condição seja verdadeira. No nosso caso enquanto a lista estiver vazia, irá aparecer uma mensagem informando que não tem tasks, e assim que uma for adicionada ela é substituída pela lista, do mesmo modo que caso sejam removidos todos da lista a mensagem voltará a aparecer

Espero que tenham gostado e consigam melhorar o código utilizando o bindStream.

GitHub – brasizza/hive-medium-p3