Mobile App Development · Dart/Flutter

07 · Array/Listas — Desafios

Dois desafios que combinam listas de mapas, acumuladores e where para gerar relatórios reais: um de produtos, outro de alunos.

Desafio 1

desafio_01_relatorio_produtos.dart

Cria uma List<Map<String, dynamic>> de produtos com nome, categoria e preço. Exibe todos acumulando o total geral com += e depois usa where para contar quantos produtos custam acima de R$ 100,00.

// Desafio: gerar relatório de produtos usando lista de mapas, acumulador e where.
// Combina iteração, acumulação e filtragem em um único programa.
void main() {
  // Lista de produtos com três atributos cada: nome, categoria e preço.
  List<Map<String, dynamic>> produtos = [
    {'nome': 'Mouse', 'categoria': 'Acessorios', 'preco': 89.90},
    {'nome': 'Teclado', 'categoria': 'Acessorios', 'preco': 150.00},
    {'nome': 'Monitor', 'categoria': 'Video', 'preco': 900.00},
  ];

  // Acumulador para somar os preços de todos os produtos.
  double total = 0;

  print('=== Produtos ===');

  // Percorre cada produto, acumula o preço e exibe o nome com o valor formatado.
  for (Map<String, dynamic> produto in produtos) {
    total += produto['preco'];
    print('${produto['nome']} - R\$ ${produto['preco'].toStringAsFixed(2)}');
  }

  // Filtra os produtos com preço superior a R$ 100 usando 'where'.
  // A condição dentro de where() retorna true apenas para produtos caros.
  List<Map<String, dynamic>> produtosCaros = produtos
      .where((produto) => produto['preco'] > 100.00)
      .toList();

  // Exibe a contagem de produtos filtrados e o total acumulado.
  print('Produtos acima de R\$ 100.00: ${produtosCaros.length}');
  print('Total geral: R\$ ${total.toStringAsFixed(2)}');
}

Saída esperada

=== Produtos ===
Mouse - R$ 89.90
Teclado - R$ 150.00
Monitor - R$ 900.00
Produtos acima de R$ 100.00: 2
Total geral: R$ 1139.90

Como executar

dart run 07-Array/03_Desafios/codigo_fonte/desafio_01_relatorio_produtos.dart

Desafio 2

desafio_02_ranking_alunos.dart

Cria uma lista de alunos (nome e nota), calcula a média geral da turma acumulando as notas e usa where para separar apenas os alunos aprovados (nota maior ou igual a 7).

// Desafio: calcular média geral e listar alunos aprovados usando where.
// Demonstra cálculo de média de coleção e filtragem por condição.
void main() {
  // Lista de alunos com nome e nota em formato de mapa.
  List<Map<String, dynamic>> alunos = [
    {'nome': 'Ana', 'nota': 8.5},
    {'nome': 'Bia', 'nota': 6.0},
    {'nome': 'Carlos', 'nota': 9.0},
    {'nome': 'Davi', 'nota': 4.5},
  ];

  // Acumula a soma de todas as notas para calcular a média geral.
  double soma = 0;

  for (Map<String, dynamic> aluno in alunos) {
    soma += aluno['nota'];
  }

  // Divide a soma pelo número de alunos para obter a média geral.
  double media = soma / alunos.length;
  // Filtra apenas os alunos com nota >= 7 (aprovados).
  List<Map<String, dynamic>> aprovados = alunos
      .where((aluno) => aluno['nota'] >= 7)
      .toList();

  // Exibe o cabeçalho e a média geral da turma.
  print('=== Ranking de Alunos ===');
  print('Media geral: ${media.toStringAsFixed(2)}');
  print('Aprovados:');

  // Percorre e exibe apenas os alunos aprovados.
  for (Map<String, dynamic> aluno in aprovados) {
    print('${aluno['nome']} - Nota: ${aluno['nota']}');
  }
}

Saída esperada

=== Ranking de Alunos ===
Media geral: 7.00
Aprovados:
Ana - Nota: 8.5
Carlos - Nota: 9.0

Como executar

dart run 07-Array/03_Desafios/codigo_fonte/desafio_02_ranking_alunos.dart