Como utilizar generics no Dart \| TreinaWeb               Promoção no ar   Matricule-se agora e garanta **54% de desconto**  

  Termina em   Tempo restante da oferta: 14 Horas 

 52 Min 

 07 Seg 

   Tempo restante da oferta: 14 52 07 

  [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 utilizar generics no Dart  [ Dart ](https://www.treinaweb.com.br/blog/categoria/dart) 

# 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.

 [ Ariel Sardinha ](https://www.treinaweb.com.br/blog/autor/ariel-sardinha) 5 anos atrás

  ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2019/10/20234042/capa-dart.png)  

Às vezes, há a necessidade de definir a funcionalidade de tal forma que ela possa usar dados de qualquer tipo, sem perder a verificação de tipo como acontece usando o dinamic, nesses casos podemos utilizar o recurso de generics presente na linguagem Dart.

Neste artigo veremos como utilizar generics ou generalização no Dart, os generics servem para que você adicione mais flexibilidade ao programa. Servem, também, para garantir que os tipos dos dados com qual estamos trabalhando sejam o que esperamos.

Simplificando, os generics são uma maneira de criar métodos, funções ou classes que funcionam com uma gama de tipos de dados em vez de apenas um.

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

## Como utilizar generics no Dart

`Lists`, `Maps` e `Futures` são os principais recursos da linguagem nos quais utilizamos os generics. É um bom hábito tirar vantagem do generics, visto que você traz mais segurança ao seu código através dessa camada a mais de tipagem, garantindo assim, que estamos trabalhando com os tipos de dados esperados. Os generics em `Lists`, por exemplo, podem ajudar a ter certeza de que cada elemento dentro de uma lista é de um determinado tipo, evitando assim que tenhamos erros por adicionar dados de tipos incorretos nessa lista. Já as generics nas `Futures` também são muito importantes, para que possamos ter uma maior confiabilidade nos dados que serão recebidos.

### Generics com Lists e Maps

Você pode declarar variáveis em `Lists` e `Maps` sem generics como neste exemplo abaixo:

```dart
List minhaLista = [];
Map meuMap = {}

```

Dessa forma teremos uma lista que podem receber itens `dynamic` e o map segue a mesma lógica, tendo a chave e valor dynamic.

Isso só deve ser feito quando você realmente precisa que suas `Lists` e `Maps` contenham múltiplos tipos diferentes. Caso você tenha certeza quais os tipos que essa lista e o map irão receber é interessante utilizar dos generics, justamente para que o compilador do Dart consiga te ajudar a trabalhar com esses dados.

Sendo assim, podemos utilizar os generics da seguinte forma:

```dart
List minhaLista = ["Treinaweb", "Dart"];
Map meuMap = {"nome": "Treinaweb", "nota_curso": 5, "curso": "Dart"}

```

## Generics em Dart utilizando nas Futures

Usamos operações assíncronas para que nosso sistema continue responsivo enquanto espera que uma operação que pode demorar algum tempo seja concluída. Um exemplo é quando precisamos buscar dados em um banco de dados. O Dart possui duas formas de trabalhar com código assíncrono, que é através das `Futures` e `Streams`.

É uma boa prática utilizar tipos ao lidar com código assíncrono, para que possamos saber quais os dados um código assíncrono pode retornar, isso ajuda no tratamento de erros uma vez saberemos qual o tipo dos dados que serão retornados. Não utilizar dessa boa pratica faz com que a nossa Future retorne um dado do tipo `dynamic` e por conta disso acabamos perdendo a segurança de tipo facilitando em novos erros e adicionando uma maior dificuldade de dar manutenção.

### Como utilizar generics em Futures

As `Futures` no Dart são instâncias da classe `Future`. Uma future representa o resultado de uma operação assíncrona, podendo ter dois estados, sendo eles, não concluídas ou concluídas. Utilizando os generics em uma Future podemos saber o tipo do dado que será retornado.

```dart
Future criarOrdem() async {
	final ordem = await fetchOrdem();
	return "Sua ordem é: $ordem";
}

```

Essa função retorna uma Future que tem como resultado uma String.

[  ![Dart - Orientação a Objetos](https://d2knvm16wkt3ia.cloudfront.net/assets/svg-icon/dart.svg)   Curso Dart - Orientação a Objetos Conhecer o curso ](https://www.treinaweb.com.br/curso/dart-orientacao-a-objetos)

## Generics em métodos e funções

O Dart suporta generics em métodos e funções, isso é muito útil quando você quer reaproveitar código. Imagine que você quer executar uma função ou método e quer reaproveitar aquele código em diversas partes da aplicação.

Para fazer com que sua função ou método aceite valores genéricos basta colocar a declaração do generic entre o nome do método e os parênteses.

Um bom exemplo é quando queremos criar uma função que quer retornar o primeiro item de uma lista:

```dart
T primeiroValor(List lista){
	return lista[0];
}

```

## Classes que aceitam generics

Você também vai querer evitar criar classes separadas com o único propósito de lidar com diferentes tipos de dados. Um exemplo simples é quando você precisa criar uma classe que tem métodos futures e você não quer reescrever uma nova classe par cada tipo de dado.

```dart
class Rest{
	final RestClient _restClient;

	Rest({requered RestClient restClient}):
		_restClient = restClient;

	Future find() async {
		await return _restClient.get(url);
	}
}

```

Essa classe irá me permitir que quando eu á instancie poderei informar com qual tipo quero trabalhar.

> Para utilizar mais que uma generic basta separa-las por virgula

## Conclusão

Neste artigo fizemos uma pequena introdução de como trabalhar com generics no Dart utilizando esse recurso em métodos, funções, classes, futures, maps e lists. saiba mais sobre o funcionamento do generics acessando a [documentação do Dart](https://dart.dev/guides/language/language-tour "Dart-documentação")

Caso queria aprender mais sobre Dart e sua infinidade de recursos saiba que aqui na [Treinaweb](https://www.treinaweb.com.br "treinaweb") nós temos o curso de [Dart - Fundamentos](https://www.treinaweb.com.br/curso/dart-fundamentos "curso de Dart fundamentos") que possui **02H21min de vídeo** e um total de 18 exercicios. Conheça também nosso outros [cursos de flutter e dart](https://www.treinaweb.com.br/cursos?q=flutter "Cursos de flutter")

Veja quais são os tópicos abordados durante o curso de Dart - Fundamentos:

- Como configurar seu ambiente de desenvolvimento
- O que são e como criar constantes e variaveis
- Como funcionam as estruturas de condições no Dart
- O que são e como criar estruturas de condições no Dart
- Como trabalhar com estrutura de repetição
- Como trabalhar com listas e mapas

- [ #dart generics ](https://www.treinaweb.com.br/blog/tag/dart-generics)
- [ #generics em dart ](https://www.treinaweb.com.br/blog/tag/generics-em-dart)
- [ #como funciona generics no dart ](https://www.treinaweb.com.br/blog/tag/como-funciona-generics-no-dart)
- [ #generics future ](https://www.treinaweb.com.br/blog/tag/generics-future)
- [ #generics map e listas ](https://www.treinaweb.com.br/blog/tag/generics-map-e-listas)
- [ #generics em classes ](https://www.treinaweb.com.br/blog/tag/generics-em-classes)

Autor

 ![Ariel Sardinha](//secure.gravatar.com/avatar/d0b89ee09026eb2b9e26f286c04eba03?d=mm)

## Ariel Sardinha

 Professor e desenvolvedor. Formando em engenharia de software e Computação - Licenciatura. É autor de cursos em diversos temas, como, desenvolvimento front-end, Flutter, JavaScript, React,js e Vue.js. Nas horas vagas adora estudar sobre tecnologia, filmes e brincar com a pequena Maria Eduarda. [arielsardinha](https://www.linkedin.com/in/ariel-sardinha/) 

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

## 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/2022/11/ARTIGO-DART-400x280.jpg)  [ Dart ](https://www.treinaweb.com.br/blog/categoria/dart) 

     4 anos atrás

    ##  [ Guia da linguagem dart ](https://www.treinaweb.com.br/blog/guia-da-linguagem-dart) 

     Nesse guia da linguagem Dart você aprenderá o necessário para criar os seus primeiros softwares com a linguagem de programação Dart.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2020/02/27202313/FLUTTER-O-QUE-É-400x280.png)  [ Desenvolvimento Front-end ](https://www.treinaweb.com.br/blog/categoria/desenvolvimento-front-end) 

     7 anos atrás

    ##  [ O que é Flutter? ](https://www.treinaweb.com.br/blog/o-que-e-flutter) 

     Veja neste artigo o que é Flutter.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2021/09/TYPESCRIPT-400x280.png)  [ Javascript ](https://www.treinaweb.com.br/blog/categoria/javascript) 

     5 anos atrás

    ##  [ Como instalar o TypeScript ](https://www.treinaweb.com.br/blog/como-instalar-o-typescript) 

     Neste artigo veremos como instalar o TypeScript, conhecer o arquivo tsconfig, executar nosso primeiro código no Node.js e no navegador.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2018/01/01132725/PETAPOCO-400x280.png)  [ C# ](https://www.treinaweb.com.br/blog/categoria/csharp) 

     9 anos atrás

    ##  [ Utilizando o Micro ORM PetaPoco em uma aplicação ASP.NET Core ](https://www.treinaweb.com.br/blog/utilizando-o-micro-orm-petapoco-em-uma-aplicacao-asp-net-core) 

     Aprenda a utilizar o Micro ORM PetaPoco em uma aplicação ASP.NET Core.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2020/01/10162055/asp-net-beanstalk-400x280.png)  [ C# ](https://www.treinaweb.com.br/blog/categoria/csharp) 

     7 anos atrás

    ##  [ Publicando uma aplicação .NET Core 3.0 no AWS Elastic Beanstalk ](https://www.treinaweb.com.br/blog/publicando-uma-aplicacao-net-core-3-0-no-aws-elastic-beanstalk) 

     Nesse artigo vamos aprender como publicar e configurar um projeto desenvolvido em ASP.NET Core 3.0 no Elastic Beanstalk, o serviço do tipo plataforma como serviço da AWS especializado para aplicações web.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2019/08/01172547/NET-CORE-3-400x280.png)  [ C# ](https://www.treinaweb.com.br/blog/categoria/csharp) 

     7 anos atrás

    ##  [ .NET Core 3.0 - Criando tarefas de segundo plano com Worker Service ](https://www.treinaweb.com.br/blog/net-core-3-0-criando-tarefas-de-segundo-plano-com-worker-service) 

     Você já quis criar tarefas em segundo plano com o .NET Core? Na versão 3.0 foi introduzido o template Worker Service que facilita a criação deste tipo de aplicação. Caso tenha passado por uma situação assim, neste artigo mostramos como você pode aproveitar este novo recurso do .NET Core 3.0.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2021/05/organizando-css-400x280.png)  [ CSS ](https://www.treinaweb.com.br/blog/categoria/css) 

     10 anos atrás

    ##  [ ITCSS - Organizando melhor o CSS ](https://www.treinaweb.com.br/blog/itcss-organizando-melhor-o-css) 

     Você já teve dificuldade com a organização e escalabilidade do seu CSS? Veja como a arquitetura ITCSS pode te ajudar.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2021/01/o_que_e_django_template_language-400x280.png)  [ Django ](https://www.treinaweb.com.br/blog/categoria/django) 

     6 anos atrás

    ##  [ O que é Django Template Language? ](https://www.treinaweb.com.br/blog/o-que-e-django-template-language) 

     Veja neste artigo o que é o Django Template Language.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2020/11/conheca-o-pyramid-framework-python-para-desenvolvimento-web-400x280.png)  [ Python ](https://www.treinaweb.com.br/blog/categoria/python) 

     6 anos atrás

    ##  [ Conheça o Pyramid, Framework Python para desenvolvimento web ](https://www.treinaweb.com.br/blog/conheca-o-pyramid-framework-python-para-desenvolvimento-web) 

     Veja neste artigo o que é o Pyramid, Framework Python para desenvolvimento web.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2020/08/o-que-e-ruby-on-rails-400x280.png)  [ Desenvolvimento Back-end ](https://www.treinaweb.com.br/blog/categoria/desenvolvimento-back-end) 

     6 anos atrás

    ##  [ O que é Ruby on Rails? ](https://www.treinaweb.com.br/blog/o-que-e-ruby-on-rails) 

     Veja neste artigo o que é Ruby on Rails.

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

     7 anos atrás

    ##  [ O que é Ionic? ](https://www.treinaweb.com.br/blog/o-que-e-ionic) 

     Veja neste artigo o que é o Ionic, principal Framework para desenvolvimento de aplicações móveis híbridas.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2018/11/03160827/NANCY-400x280.png)  [ C# ](https://www.treinaweb.com.br/blog/categoria/csharp) 

     8 anos atrás

    ##  [ Criando uma API RESTful com o NancyFx e .NET Core ](https://www.treinaweb.com.br/blog/criando-uma-api-restful-com-o-nancyfx-e-net-core) 

     O NancyFX é um leve framework para o C#. Veja como utilizá-lo para criar uma API RESTful.

     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  **14h 52min 07s**

- 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
