Mobile App Development · Dart/Flutter
Um conjunto de programas de prática independentes, não amarrados a uma única lição — cada um explora classes, listas de objetos, funções e leitura de entrada de um jeito diferente.
Exercício
Cadastra fornecedores em uma List<Fornecedor> tipada, usando uma classe com construtor nomeado (required), e percorre a lista com um laço for indexado para montar um relatório numerado no console.
// Exercício: cadastrar fornecedores em uma lista de objetos e exibir o relatório.
// Demonstra classe com construtor nomeado, List<T> tipada e laço 'for' com índice.
class Fornecedor {
final String nome;
final String cnpj;
final String telefone;
final String email;
Fornecedor({
required this.nome,
required this.cnpj,
required this.telefone,
required this.email,
});
}
void main() {
final fornecedores = <Fornecedor>[
Fornecedor(
nome: 'Mercado Central',
cnpj: '12.345.678/0001-99',
telefone: '(11) 99999-1111',
email: 'contato@mercadocentral.com',
),
Fornecedor(
nome: 'Distribuidora Sul',
cnpj: '98.765.432/0001-10',
telefone: '(11) 98888-2222',
email: 'vendas@distribuidorasul.com',
),
];
print('=== Cadastro de Fornecedores ===');
for (var i = 0; i < fornecedores.length; i++) {
final f = fornecedores[i];
print('Fornecedor ${i + 1}');
print('Nome: ${f.nome}');
print('CNPJ: ${f.cnpj}');
print('Telefone: ${f.telefone}');
print('Email: ${f.email}');
print('----------------------------');
}
}
Saída esperada
=== Cadastro de Fornecedores === Fornecedor 1 Nome: Mercado Central CNPJ: 12.345.678/0001-99 Telefone: (11) 99999-1111 Email: contato@mercadocentral.com ---------------------------- Fornecedor 2 Nome: Distribuidora Sul CNPJ: 98.765.432/0001-10 Telefone: (11) 98888-2222 Email: vendas@distribuidorasul.com ----------------------------
Como executar
dart run 18-Exercicios/codigo_fonte/cadastro_fornecedores.dart
Exercício
Gerencia uma lista de contatos usando uma classe Contato com construtor nomeado, onde cada contato é um objeto com três atributos final — imutáveis após a criação. Segue o mesmo padrão de relatório numerado do exercício de fornecedores.
// Exercício: gerenciar uma lista de contatos usando classe com construtor nomeado.
// Cada contato é um objeto com três atributos 'final' — imutáveis após a criação.
class Contato {
final String nome;
final String telefone;
final String email;
Contato({required this.nome, required this.telefone, required this.email});
}
void main() {
final contatos = <Contato>[
Contato(
nome: 'Ana Souza',
telefone: '(11) 97777-1000',
email: 'ana@email.com',
),
Contato(
nome: 'Carlos Lima',
telefone: '(11) 96666-2000',
email: 'carlos@email.com',
),
];
print('=== Lista de Contatos ===');
for (var i = 0; i < contatos.length; i++) {
final c = contatos[i];
print('Contato ${i + 1}');
print('Nome: ${c.nome}');
print('Telefone: ${c.telefone}');
print('Email: ${c.email}');
print('----------------------');
}
}
Saída esperada
=== Lista de Contatos === Contato 1 Nome: Ana Souza Telefone: (11) 97777-1000 Email: ana@email.com ---------------------- Contato 2 Nome: Carlos Lima Telefone: (11) 96666-2000 Email: carlos@email.com ----------------------
Como executar
dart run 18-Exercicios/codigo_fonte/contatos.dart
Exercício
Calcula o valor final de uma cotação com desconto percentual, encapsulando a fórmula em uma função calcularCotacao separada para reutilização e clareza. Usa toStringAsFixed para formatar preços e percentuais na exibição.
// Exercício: calcular o valor final de uma cotação com desconto percentual.
// Encapsula a fórmula em uma função separada para reutilização e clareza.
double calcularCotacao(
double precoUnitario,
int quantidade,
double descontoPct,
) {
// Subtotal = preço unitário × quantidade (sem desconto).
final double subtotal = precoUnitario * quantidade;
// Desconto = subtotal × (percentual / 100).
final double desconto = subtotal * (descontoPct / 100);
return subtotal - desconto;
}
void main() {
final produto = 'Notebook';
final precoUnitario = 4200.00;
final quantidade = 2;
final descontoPct = 7.5;
final total = calcularCotacao(precoUnitario, quantidade, descontoPct);
print('=== Cotacao de Produto ===');
print('Produto: $produto');
print('Preco unitario: R\$ ${precoUnitario.toStringAsFixed(2)}');
print('Quantidade: $quantidade');
print('Desconto: ${descontoPct.toStringAsFixed(1)}%');
print('Valor final: R\$ ${total.toStringAsFixed(2)}');
}
Saída esperada
=== Cotacao de Produto === Produto: Notebook Preco unitario: R$ 4200.00 Quantidade: 2 Desconto: 7.5% Valor final: R$ 7770.00
Como executar
dart run 18-Exercicios/codigo_fonte/cotacao.dart
Exercício
Cadastro interativo de fornecedores via stdin: pede nome, CNPJ, telefone e email um a um, valida que nenhum campo fique vazio (repetindo a pergunta se faltar algo) e, ao final de cada fornecedor, pergunta se o usuário quer cadastrar outro. Ao encerrar o laço, exibe a lista completa de fornecedores cadastrados na sessão — ou uma mensagem avisando que nenhum foi cadastrado.
// Exercício: cadastro interativo de fornecedores via stdin com validação e listagem final.
// Combina classe com construtor nomeado, laço 'while' e leitura de stdin em loop.
import 'dart:io';
class Fornecedor {
final String nome;
final String cnpj;
final String telefone;
final String email;
Fornecedor({
required this.nome,
required this.cnpj,
required this.telefone,
required this.email,
});
}
String lerTexto(String mensagem) {
stdout.write(mensagem);
return stdin.readLineSync()?.trim() ?? '';
}
void main() {
final lista = <Fornecedor>[];
print('=== Cadastro Interativo de Fornecedores ===');
while (true) {
final nome = lerTexto('Nome do fornecedor: ');
final cnpj = lerTexto('CNPJ: ');
final telefone = lerTexto('Telefone: ');
final email = lerTexto('Email: ');
if (nome.isEmpty || cnpj.isEmpty || telefone.isEmpty || email.isEmpty) {
print('Todos os campos sao obrigatorios. Tente novamente.');
} else {
lista.add(
Fornecedor(nome: nome, cnpj: cnpj, telefone: telefone, email: email),
);
print('Fornecedor cadastrado com sucesso.');
}
final continuar = lerTexto('Deseja cadastrar outro? (s/n): ').toLowerCase();
if (continuar != 's') break;
print('');
}
print('\n=== Fornecedores Cadastrados ===');
if (lista.isEmpty) {
print('Nenhum fornecedor cadastrado.');
return;
}
for (var i = 0; i < lista.length; i++) {
final f = lista[i];
print('Fornecedor ${i + 1}');
print('Nome: ${f.nome}');
print('CNPJ: ${f.cnpj}');
print('Telefone: ${f.telefone}');
print('Email: ${f.email}');
print('----------------------------');
}
}
Saída esperada
Este programa lê do stdin, então a saída depende do que o usuário digitar em cada execução — não há uma saída fixa. Ele imprime prompts pedindo nome, CNPJ, telefone e email; repete a pergunta se algum campo ficar vazio; pergunta "Deseja cadastrar outro? (s/n): " após cada fornecedor; e, ao final, lista todos os fornecedores cadastrados na sessão (ou avisa que a lista está vazia, caso o usuário nunca confirme um cadastro válido).
Como executar
dart run 18-Exercicios/codigo_fonte/lista_fornecedores_prompt.dart