1
resposta

Entendo melhor Future e o SQFLITE

Meu app funcionou perfeitamente mas fiquei com algumas dúvidas, em especial no conceito de Future, trata-se de uma função assíncrona? Ele recebe um elemento T genérico ou existem regras. Gostaria de uma explicação um pouco mais simples.

Outro conceito que me intrigou muito, estou acostumado com JAVA e os famigerados TRY CATCH para abrir conexão com BD e não vi nenhuma aqui. Existe um pq disso ou o Flutter é abençoado por natureza? kkkkk

Abraços

1 resposta

Olá Marcos, tudo bem?

Isso mesmo, iremos utilizar o Future para trabalhar com funções que tem comportamento assíncrono, tanto para consultas de banco de dados, quanto com API's que o nosso aplicativo utilize

Ele recebe um elemento T genérico ou existem regras. Gostaria de uma explicação um pouco mais simples.

Ela é totalmente genérica, podemos ter algo bem simples como:

Future basic() => Future.delayed( Duration( seconds: 2), () => "Olá Mundo");

E dentro do nosso código utilizar

basic().then( (valor) => print(valor));

Então basta ter uma operação assíncrona, um qualquer dado que queira responder depois de um tempo, que podemos envolver com o Future, podemos pensar no mundo Java com o CompletableFuture

estou acostumado com JAVA e os famigerados TRY CATCH para abrir conexão com BD

A grande questão é quando iremos tratar esse problema, até no mundo Java as vezes podemos dizer que nossa função lança um erro para não tratar naquele ponto do código, ou as vezes podemos até ver o chamado catch & rethrow

Aqui também poderíamos pensar em algum erro gerado e tratar, mas tipicamente pelo sqflite como é um banco de dados local, a única possibilidade seria se houvesse problema em criar o banco

E dessa forma podemos delegar para outras camadas cuidar de algum erro, por exemplo uma inserção repetida, podemos deixar para a view pegar esse erro e dar uma mensagem para o usuário

A grande questão é que com Future não utilizaremos o try | catch, e sim, uma função parecida com o then, que é o catchError

Para ter o try | catch trocaríamos esse método utilizando Future's para async | await que é uma outra forma de trabalhar com valores futuros

Eu fiz um pequeno exemplo aqui que demonstra um pouco desse funcionamento, o primeiro comentado, é trabalhando puramente com Future e o segundo é utilizando o async / await

Agora sim, se não utilizarmos catchError ou try & catch em nenhum ponto do nosso código iremos explodir um erro em produção...

Abraços e Bons Estudos :)