Carlos Batista 3 years ago
carlosbatista.dev

#3 - Manipulando listas no Dart

Trabalhe com o método where de forma prática

Olá!


Vamos continuar falando sobre listas, e principalmente como obter itens que atendam uma condição específica.

Então vamos para prática!

Vamos utilizar a seguinte lista:



final tarefas = [
  {'title': "Criar uma post sobre listas", "done": false},
  {'title': "Recomendar que siga o Instagram da Strawti", "done": false},
  {'title': "Fale sobre o YouTube", "done": false},
];


Temos uma lista simples do tipo List<Map<String, dynamic>>, só que vamos mudar um pouco para melhorar nossa visualização e organização.


Vamos criar uma classe e pode ser em português mesmo, vou chama-la de TarefaModel, o Model no final é apenas para reforçar a responsabilidade dessa classe que é guardar os dados que ela receberá, claro que os dados que estamos usando são o title e done.


Ela deve ficar assim:

class TarefaModel {
  final String title;
  final bool done;
  
  TarefaModel({
    required this.title,
    this.done=false,
  });
}


Bem simples né ?

Bom, temos ai os atributos com o final para que não haja alterações nos atributos da classe, mas e como fazemos resolver a questão de alterar a done para true quando quisermos concluir uma tarefa ?


Bom, poderíamos sim tirar o final e alterar diretamente o atributo, porém eu quero mostrar para vocês o copyWith também.

O que vamos manipular?

Agora que temos a lista e o modelo. Vamos preparar tudo para começarmos a brincar com a lista.


void main() {
  final tarefas = [
    TarefaModel(title: "Criar uma post sobre listas"),
    TarefaModel(title: "Recomendar que siga o Instagram da Strawti"),
    TarefaModel(title: "Fale sobre o YouTube"),
  ];
}


class TarefaModel {
  final String title;
  final bool done;


  TarefaModel({
    required this.title,
    this.done = false,
  });
}


Deixei o código completo para você copiar e rodar no DartPad se quiser ver por ai.


Vamos entender o que temos agora:

  1. Agora nossa lista mondou de tipo, passou a ser uma List<TarefaModel>. Isto é, uma lista do tipo TarefaModel.
  2. Não precisamos informar o done como false já que ele é definido por padrão como false caso não for informado.


Não mudou muito né ?

Situação com Listas

Acredito que você já se deparou com uma lista de itens e precisou criar um filtro como por exemplo:


Você tem uma lista de comidas e quer mostrar apenas os doces ou os salgados, ou até mesmo todas as comidas que começam com a letra 'a' ou sei lá!


Obvio que existem formas diferentes de se chegar a esse resultado, nós faremos dois.


Primeiro usaremos o for loop para percorrer a lista de tarefas para trazer apenas as tarefas que foram concluídas.

Depois faremos o mesmo, porém com o método where.

Filtrando com o For loop

Veja o código a seguir:


void main() {
  final tarefas = [
    TarefaModel(title: "Criar uma post sobre listas"),
    TarefaModel(title: "Recomendar que siga o Instagram da Strawti"),
    TarefaModel(title: "Fale sobre o YouTube"),
  ];
  
  
  final tarefasFiltrada = [];
  for (TarefaModel tarefa in tarefas) {
    if (tarefa.done) {
      tarefasFiltrada.add(tarefa);
    }
  }
  
  print(tarefasFiltrada);
}


class TarefaModel {
  final String title;
  final bool done;


  TarefaModel({
    required this.title,
    this.done = false,
  });
}


Acrescentamos o seguinte:


  final tarefasFiltrada = [];
  for (TarefaModel tarefa in tarefas) {
    if (tarefa.done) {
      tarefasFiltrada.add(tarefa);
    }
  }
  
  print(tarefasFiltrada);


Aqui temos uma outra lista, tarefasFiltrada que receberá nossos itens específicos.

2
773

Extensões do VS code que todo dev Flutter deve usar

1646920549.png
Carlos Batista
2 years ago

[Quick tip] Sobre altura de Container/SizedBox

Saiba o porquê você deve evitar o uso de alturas fixas em Containers e nos SizedBox.

1646920549.png
Carlos Batista
2 years ago
Como escolher uma empresa de desenvolvimento de apps?

Como escolher uma empresa de desenvolvimento de apps?

1724944350.webp
Deyv
2 years ago

Null-Safety no Dart

Se você está aprendendo Dart e ainda não compreendeu bem a questão do null-safety, eu acre...

1646920549.png
Carlos Batista
2 years ago
Como a tecnologia mobile pode impulsionar o faturamento da sua empresa

Como a tecnologia mobile pode impulsionar o faturamento da sua empresa

1724944350.webp
Deyv
1 year ago