1
resposta

Meu projeto de notas Dart

import 'dart:io';

void main() {
  List<String> notas = <String>[];

  // Cabeçalho ASCII
  printAsciiHeader();

  // Loop principal do menu
  while (true) {
    String comando = getComando();

    if (comando == "1") {
      adicionaNotas(notas);
    } else if (comando == "2") {
      listarNotas(notas);
    } else if (comando == "3") {
      print("\nObrigado por usar o sistema. Até logo!\n");
      break;
    }

    // pequena separação visual entre operações
    print("\n" + ("-" * 40) + "\n");
  }
}

void printAsciiHeader() {
  print(r'''
   __  __ _      _              _  _     _           
 |  \/  (_)_ _ | |_  __ _ ___ | \| |___| |_ __ _ ___
 | |\/| | | ' \| ' \/ _` (_-< | .` / _ \  _/ _` (_-<
 |_|  |_|_|_||_|_||_\__,_/__/ |_|\_\___/\__\__,_/__/
                                                    
     Sistema de Notas - Bytebank
  ''');
}


/// Pede e valida um comando (1,2,3). Repete até entrada válida.
String getComando() {
  stdout.write("Digite um comando: 1 - Adicionar notas, 2 - Listar notas, 3 - Sair\n> ");
  List<String> comandos = ["1", "2", "3"];
  String? entrada = stdin.readLineSync()?.trim();

  if (entrada == null || entrada.isEmpty || !comandos.contains(entrada)) {
    print("Comando inválido, tente novamente.\n");
    return getComando(); // retorna a chamada recursiva corrigida
  }

  return entrada;
}

/// Adiciona uma ou mais notas. Pergunta se o usuário quer adicionar outra nota.
void adicionaNotas(List<String> notas) {
  while (true) {
    stdout.write("\nDigite a nota a ser adicionada:\n> ");
    String? nota = stdin.readLineSync();

    if (nota == null || nota.trim().isEmpty) {
      print("Não é possível adicionar uma nota vazia.");
    } else {
      notas.add(nota.trim());
      print("Nota adicionada com sucesso.");
    }

    // Pergunta se quer adicionar outra
    stdout.write("Deseja adicionar outra nota? (s/n)\n> ");
    String? resposta = stdin.readLineSync();
    if (resposta == null) resposta = "n";
    resposta = resposta.trim().toLowerCase();
    if (resposta != 's' && resposta != 'sim') {
      break;
    }
  }
}

/// Lista as notas com índice; informa se não houver notas.
void listarNotas(List<String> notas) {
  print("\n===== Lista de Notas =====");
  if (notas.isEmpty) {
    print("Nenhuma nota cadastrada.");
    return;
  }

  for (var i = 0; i < notas.length; i++) {
    print("${i + 1}. ${notas[i]}");
  }
}

Garanta sua matrícula hoje e ganhe + 2 meses grátis

Continue sua jornada tech com ainda mais tempo para aprender e evoluir

Quero aproveitar agora
1 resposta

Olá, Paulo, como vai?

Seu projeto está muito bem estruturado e dá para ver que você aplicou os conceitos do curso de maneira correta. O menu funciona de forma clara, o uso da recursão em getComando está adequado para garantir entradas válidas e as funções estão bem organizadas. O ASCII art no cabeçalho também trouxe um toque legal de identidade ao sistema.

Continue compartilhando seus exercícios, Paulo, seu código está muito bom. O fórum está sempre à disposição para você trocar ideias e evoluir ainda mais.

Alura Conte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!