Como funciona o async-await e Future no Flutter \| TreinaWeb               Promoção no ar   Matricule-se agora e garanta **54% de desconto**  

  Termina em   Tempo restante da oferta: 01 Horas 

 05 Min 

 04 Seg 

   Tempo restante da oferta: 01 05 04 

  [Assinar →](https://www.treinaweb.com.br/checkout/pagamento/plano/anual?cupom=TW-SCLIENTE26) 

   [                ](https://www.treinaweb.com.br)  Explorar  

 [ Quanto custa? ](#assinatura) [ FAQ ](https://www.treinaweb.com.br#faq) [Matricule-se](#assinatura) [ Entrar ](https://www.treinaweb.com.br/login) 

     [ Início ](https://www.treinaweb.com.br) [ Artigos ](https://www.treinaweb.com.br/blog) Como funciona o async-await e Future no Flutter  [ Flutter ](https://www.treinaweb.com.br/blog/categoria/flutter) [ Dart ](https://www.treinaweb.com.br/blog/categoria/dart) 

# Como funciona o async-await e Future no Flutter

 Veja neste artigo como trabalhar com programação assíncrona no Flutter.

 [ Fagner Pinheiro ](https://www.treinaweb.com.br/blog/autor/fagner-pinheiro) 6 anos atrás

  ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2020/11/como-funciona-o-async-await-e-future-no-flutter.png)  

Quando estamos desenvolvendo uma aplicação [Flutter](https://www.treinaweb.com.br/blog/o-que-e-flutter/ "Flutter"), é comum precisarmos acessar recursos externos, seja um arquivo, buscar dados de um banco de dados local ou até acessar algum recurso de uma API externa. Porém, todo recurso leva um tempo para retornar algo e precisamos liberar o app para que as outras tarefas continuem executando, “destravando” a execução e permitindo que a interface da tela, por exemplo, seja renderizada. Para isso, utilizamos o conceito de programação assíncrona no Flutter, conforme veremos durante este artigo.

## Como funciona a programação assíncrona

Como vimos anteriormente, é comum que uma aplicação acesse recursos externos, o que pode levar um certo tempo até que o processo seja finalizado, porém, neste meio tempo, a aplicação precisa ser “liberada” para executar suas outras tarefas, como a renderização da [interface da tela](https://www.treinaweb.com.br/blog/flutter-widgets-stateful-e-stateless/ "interface da tela").

Para isso, precisamos trabalhar com um modelo de programação um pouco diferente do “habitual”, a [programação assíncrona](https://www.treinaweb.com.br/blog/concorrencia-paralelismo-processos-threads-programacao-sincrona-e-assincrona/).

Basicamente, na programação assíncrona, uma tarefa pode ser executada enquanto espera o processamento de uma outra finalizar. Este modelo é diferente da programação que estamos mais habituados a trabalhar, chamada de programação síncrona.

Na programação síncrona, uma tarefa só é executada quando outra é finalizada, como podemos ver na imagem abaixo:

![Funcionamento síncrono](https://dkrn4sk0rn31v.cloudfront.net/uploads/2020/11/funcionamento-sincrono.png)

Já na programação assíncrona, diversas tarefas podem ser executadas em “paralelo”, dividindo o tempo com a execução de diferentes tarefas:

![Funcionamento assíncrono](https://dkrn4sk0rn31v.cloudfront.net/uploads/2020/11/funcionamento-assincrono.png)

Este modelo é essencial para que uma tela acesse informações de um banco de dados, por exemplo, e enquanto espera estes dados, renderize a interface da página e este processo será detalhado no próximo tópico.

[  ![Flutter - Fundamentos](https://d2knvm16wkt3ia.cloudfront.net/assets/svg-icon/flutter.svg)   Curso Flutter - Fundamentos Conhecer o curso ](https://www.treinaweb.com.br/curso/flutter-fundamentos)

## Programação assíncrona no Flutter

Para utilizar o [modelo assíncrono no Flutter](https://dart.dev/codelabs/async-await "modelo assíncrono no Flutter"), precisamos utilizar três palavras-chave: async, await e Future.

- O `async` determina que um método será assíncrono, ou seja, não irá retornar algo imediatamente, então o aplicativo pode continuar a execução de outras tarefas enquanto o processamento não é finalizado.
- O `await` serve para determinar que o aplicativo deve esperar uma resposta de uma função antes de continuar a execução. Isso é muito importante pois há casos em que uma função depende do retorno de outra.
- Já o `Future` determina que uma função irá retornar algo no “futuro”, ou seja, é uma função que levará um tempo até ser finalizada.

### Implementando o modelo assíncrono

Imagine, então, um método que retornará todos os pets de um determinado banco de dados (não se preocupe com a forma que estes dados serão pesquisados). Como é algo que pode demorar um certo tempo até ser finalizado (temos que buscar os dados do banco de dados, processar as informações para, só então, retornar estes dados), precisamos criar uma função assíncrona, como podemos ver abaixo:

```java
Future getAllPets() async {
    final dataList = await DbUtil.getData('pets');
    _petList = dataList.map((pets) => Pet.fromMap(pets)).toList();
    return _petList;
  }

```

[  ![Flutter - Rotas e Pilhas](https://d2knvm16wkt3ia.cloudfront.net/assets/svg-icon/flutter.svg)   Curso Flutter - Rotas e Pilhas Conhecer o curso ](https://www.treinaweb.com.br/curso/flutter-rotas-e-pilhas)

No código acima, estamos determinando que o método `getAllPets()` irá retornar uma lista no “futuro”, por isso o uso do `Future`. Além disso, essa função será assíncrona, sendo assim, precisamos indicar na assinatura do método a palavra `async`.

Além disso, para retornar a lista de pets, precisamos buscar estes dados de um banco de dados. Porém, esta consulta não é imediata, levando um certo tempo para ser concluída.

Para que o Flutter “espere” até que alguma informação seja retornada do banco de dados, utilizamos o `await`, indicando que o restante do método só poderá ser executado quando houver um retorno do método `DbUtil.getData('pets')`.

Agora, sempre que o método `getAllPets()` for invocado, o Flutter sabe que trata-se de um método assíncrono e, por isso, ele pode continuar a execução de outras tarefas enquanto este método “trabalha”.

Isso facilita (e muito) nosso trabalho, já que um app não pode ficar “travado” esperando o retorno de algo, o que comprometeria a usabilidade do usuário.

## Conclusão

O conceito de assíncronismo é muito importante no Flutter/Dart (e em outras linguagens também), pois há casos em que um método levará um certo tempo para ser executado e o app não pode “travar” até que este retorno aconteça.

- [ #assíncrono ](https://www.treinaweb.com.br/blog/tag/assincrono)
- [ #dart ](https://www.treinaweb.com.br/blog/tag/dart)
- [ #flutter ](https://www.treinaweb.com.br/blog/tag/flutter)

Autor

 ![Fagner Pinheiro](//secure.gravatar.com/avatar/e622f7c7d686a0b11f8d977ce9725b67?d=mm)

## Fagner Pinheiro

 Professor na TreinaWeb e graduado em Sistemas de Informação pelo Instituto Federal da Bahia. Apaixonado por desenvolvimento web, desktop e mobile desde os 12 anos de idade. Já utilizou todos os sistemas operacionais possíveis, mas hoje se contenta com o OSX instalado em seu desktop. Quando não está trabalhando, é IGL e Awper do time de CS:GO da Treinaweb. Até passou em uma peneira do Cruzeiro, mas preferiu estudar Python. 

 [Todos os artigos](https://www.treinaweb.com.br/blog/autor/fagner-pinheiro)  

## Continue estudando

 Transforme leitura em prática com os cursos e formações da TreinaWeb.

 [Ver cursos](https://www.treinaweb.com.br/cursos)   

  Continue lendo

## Artigos relacionados

- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2019/10/20234042/capa-dart-400x280.png)  [ Dart ](https://www.treinaweb.com.br/blog/categoria/dart) 

     5 anos atrás

    ##  [ Como utilizar generics no Dart ](https://www.treinaweb.com.br/blog/como-utilizar-generics-no-dart) 

     Neste artigo vamos aprender sobre os Generics na linguagem Dart e como eles podem nos auxiliar em garantir que os tipos dos objetos sejam o que esperamos que eles sejam.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2018/04/05114901/ORLEANS-NET-CORE-400x280.png)  [ C# ](https://www.treinaweb.com.br/blog/categoria/csharp) 

     9 anos atrás

    ##  [ Criando uma aplicação distribuída com ASP.NET Core e o Microsoft Orleans ](https://www.treinaweb.com.br/blog/criando-uma-aplicacao-distribuida-com-asp-net-core-e-o-microsoft-orleans) 

     Veja o exemplo de uma aplicação ASP.NET Core acessando os dados de um servidor cluster definido com o Microsoft Orleans.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2019/02/18175820/RAZOR-COMPONENTS-400x280.png)  [ C# ](https://www.treinaweb.com.br/blog/categoria/csharp) 

     8 anos atrás

    ##  [ .NET Core 3.0 - Criando componentes no Razor Components ](https://www.treinaweb.com.br/blog/net-core-3-0-criando-componentes-no-razor-components) 

     Veja neste artigo como é a estrutura de um componente do Razor Componente e aprenda a criar um.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2018/09/17132411/middlewares-aspnet-400x280.png)  [ Desenvolvimento Back-end ](https://www.treinaweb.com.br/blog/categoria/desenvolvimento-back-end) 

     8 anos atrás

    ##  [ Compreendendo os middlewares no ASP.NET Core ](https://www.treinaweb.com.br/blog/compreendendo-os-middlewares-no-asp-net-core) 

     Veja como os middlewares funcionam em uma aplicação ASP.NET Core.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2017/07/usando-o-async-await-do-javascript-400x280.png)  [ Javascript ](https://www.treinaweb.com.br/blog/categoria/javascript) 

     10 anos atrás

    ##  [ Usando o Async / Await do JavaScript ](https://www.treinaweb.com.br/blog/usando-o-async-await-do-javascript) 

     Conheça a funcionalidade async / await do JavaScript que nos ajuda a trabalhar com códigos assíncronos como se estivéssemos escrevendo de forma síncrona.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2025/01/NOVIDADES-REACT-19-400x280.jpg)  [ Desenvolvimento Front-end ](https://www.treinaweb.com.br/blog/categoria/desenvolvimento-front-end) 

     2 anos atrás

    ##  [ 4 Novidades do React 19 ](https://www.treinaweb.com.br/blog/4-novidades-do-react-19) 

     Descubra 4 novidades do React 19, incluindo novos hooks, otimizações de performance e uso prático das Actions para formulários.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2020/01/03075049/Inteligência-Artificial-Selecionando-Cores-400x280.png)  [ Machine Learning ](https://www.treinaweb.com.br/blog/categoria/machine-learning) 

     7 anos atrás

    ##  [ Desenvolva uma Inteligência Artificial que reconhece cores diretamente no navegador com TensorFlow.js ](https://www.treinaweb.com.br/blog/desenvolva-uma-inteligencia-artificial-que-reconhece-cores-diretamente-no-navegador-com-tensorflow-js) 

     Aprenda a trabalhar com Machine Learning diretamente no navegador usando o TensorFlow.js

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2020/09/cache-memória-asp-net-400x280.png)  [ C# ](https://www.treinaweb.com.br/blog/categoria/csharp) 

     6 anos atrás

    ##  [ Implementando cache de memória no ASP.NET Core ](https://www.treinaweb.com.br/blog/implementando-cache-de-memoria-no-asp-net-core) 

     A performance de um site pode ser um favor determinante para o seu sucesso ou fracasso, veja como melhorar isso no ASP.NET Core com cache de memória.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2017/06/javascript-generators-e-onde-usa-los-400x280.png)  [ Javascript ](https://www.treinaweb.com.br/blog/categoria/javascript) 

     10 anos atrás

    ##  [ JavaScript Generators e onde usá-los ](https://www.treinaweb.com.br/blog/javascript-generators-e-onde-usa-los) 

     Veja como e onde podemos aproveitar os Generators no JavaScript para melhorar o nosso código.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2018/08/17172630/desenvolvedor-web-400x280.png)  [ Desenvolvimento Back-end ](https://www.treinaweb.com.br/blog/categoria/desenvolvimento-back-end) 

     8 anos atrás

    ##  [ Quatro habilidades para se tornar um desenvolvedor web back-end ](https://www.treinaweb.com.br/blog/quatro-habilidades-para-se-tornar-um-desenvolvedor-web-back-end) 

     Conheça as habilidades necessárias para se tornar um bom desenvolvedor web back-end.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2021/11/diferenca_entre_os_atributos_async_e_defer-400x280.png)  [ Desenvolvimento Front-end ](https://www.treinaweb.com.br/blog/categoria/desenvolvimento-front-end) 

     5 anos atrás

    ##  [ Diferença entre os atributos async e defer ](https://www.treinaweb.com.br/blog/diferenca-entre-os-atributos-async-e-defer) 

     Nesse artigo vamos ver em detalhes como os atributos async e defer se comportam ao declarar seus arquivos JavaScript no HTML.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2019/07/31142052/mjml-cover-400x280.png)  [ Desenvolvimento ](https://www.treinaweb.com.br/blog/categoria/desenvolvimento) 

     7 anos atrás

    ##  [ E-mails responsivos com a linguagem de marcação MJML ](https://www.treinaweb.com.br/blog/e-mails-responsivos-com-a-linguagem-de-marcacao-mjml) 

     O MJML é um framework e linguagem de marcação para a criação de e-mails responsivos. Veja como integrá-lo aos seus projetos.

     Ler artigo

## Um ano de acesso total para você viver de programação.

 Todos os cursos e formações da TreinaWeb numa única assinatura, com professores que atuam no mercado, suporte direto e certificados. Do primeiro `console.log` ao mercado de trabalho.

- **1 ano** de acesso a **todos os cursos**
- Cursos novos **toda semana**
- Suporte **direto com professores**
- Plano de carreira **personalizado**
- **Certificados digitais** inclusos
- **Aplicativos** para Android e iOS, com **acesso offline**

    **Garantia incondicional de satisfação** 

 Teste por 7 dias e, se não fizer sentido para você, devolvemos seu dinheiro.

### Acesso completo a todos os cursos e dezenas de Formações.

 12 meses 

  Economize R$ 840,00  54% OFF 

 de 12x R$ 129,00 por apenas

 12x  R$ 59,00

 sem juros no cartão de crédito ou R$ 599,00 à vista

  Oferta termina em  **01h 05min 04s**

- Acesso imediato e ilimitado durante 1 ano.
- Plano de carreira personalizado.
- Suporte direto com professores.
- E muito mais!

 [Matricule-se agora](https://www.treinaweb.com.br/checkout/pagamento/plano/anual?cupom=TW-SCLIENTE26)

     [                ](https://www.treinaweb.com.br)

 Escola online de programação, tecnologia e IA.

- [  ](https://www.facebook.com/TreinaWeb/)
- [  ](https://www.instagram.com/treinaweb/)
- [  ](https://www.youtube.com/user/TreinaWeb)
- [  ](https://twitter.com/treinaweb)
- [  ](https://www.linkedin.com/company/treinaweb)
- [  ](https://github.com/treinaweb)

## Inscreva-se em nossa newsletter

Receba lançamentos, promoções e novidades.

   Seu nome     Seu WhatsApp     Seu melhor e-mail   Inscrever-se 

## Cursos

- [ Base para Devs ](https://www.treinaweb.com.br/categoria/base-para-devs)
- [ Front-end ](https://www.treinaweb.com.br/categoria/desenvolvimento-front-end)
- [ Back-end ](https://www.treinaweb.com.br/categoria/desenvolvimento-back-end)
- [ Mobile ](https://www.treinaweb.com.br/categoria/desenvolvimento-mobile)
- [ Bancos de Dados ](https://www.treinaweb.com.br/categoria/bancos-de-dados)
- [ Cloud ](https://www.treinaweb.com.br/categoria/cloud-computing)
- [ IA ](https://www.treinaweb.com.br/categoria/ia)
- [ E mais ](https://www.treinaweb.com.br/categoria/e-mais)
- [ Ver todos os cursos ](https://www.treinaweb.com.br/cursos)

## Conteúdo

- [ Formações ](https://www.treinaweb.com.br/formacoes)
- [ Projetos práticos ](https://www.treinaweb.com.br/projetos-praticos)
- [ Direto ao ponto ](https://www.treinaweb.com.br/direto-ao-ponto)
- [ Planos ](https://www.treinaweb.com.br#assinatura)
- [ Depoimentos ](https://www.treinaweb.com.br#depoimentos)
- [ Comunidade ](https://www.treinaweb.com.br#comunidade)
- [ Corpo docente ](https://www.treinaweb.com.br#docente)

## A empresa

- [ Sobre a TreinaWeb ](https://www.treinaweb.com.br#sobre)
- [ Perguntas frequentes ](https://www.treinaweb.com.br#faq)
- [ Vantagens de estudar na TreinaWeb ](https://www.treinaweb.com.br/vantagens-de-estudar-na-treinaweb)
- [ Cursos para empresas ](https://www.treinaweb.com.br/empresas)
- [ Sugira um novo curso ](https://www.treinaweb.com.br/sugerir-curso)
- [ Trabalhe conosco ](https://www.treinaweb.com.br/trabalhe-conosco)
- [ Artigos ](https://www.treinaweb.com.br/blog)
- [ Desenvolvedores e agentes ](https://www.treinaweb.com.br/developers)
- [ Contato ](https://www.treinaweb.com.br/contato)
- [ Política de privacidade ](https://www.treinaweb.com.br/politica-de-privacidade)
- [ Termos de uso ](https://www.treinaweb.com.br/termos-de-uso)

## Baixe nosso aplicativo

 [   Disponível na **App Store**  ](https://apps.apple.com/us/app/treinaweb/id1322729447) [   Disponível no **Google Play**  ](https://play.google.com/store/apps/details?id=br.com.treinaweb.mobile) 

  Av. Paulista, 1765, Conj 71 e 72 · Bela Vista · São Paulo · SP · 01311-200   © 2004 – 2026 TreinaWeb Tecnologia LTDA · CNPJ 06.156.637/0001-58
