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.
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:
Não mudou muito né ?
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.
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.
Saiba o porquê você deve evitar o uso de alturas fixas em Containers e nos SizedBox.
Se você está aprendendo Dart e ainda não compreendeu bem a questão do null-safety, eu acre...