Mobile App Development · Dart/Flutter
Dois desafios que combinam listas de mapas, acumuladores e where para gerar relatórios reais: um de produtos, outro de alunos.
Desafio 1
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
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