- Validação de categorias de produtos em um sistema de estoque
import 'dart:io';
void main(){
  List<String> categoria = <String>["eletronicos", "alimentos", "vestuario", "livros"];
  String? entrada = "";
  void categoriaValida(){
    print("Digite a categoria do produto ${categoria.toString()}");
      entrada = stdin.readLineSync();
        if (entrada != null && categoria.contains(entrada)){
          print("Categoria valida: $entrada");
        } else {
          print("Categoria invalida");
          categoriaValida();
          }
  }
  categoriaValida();
}
- Validação de tipos de arquivos em um sistema de upload
import 'dart:io';
void main(){
  List<String> tiposPermitidos = <String>["pdf", "jpeg", "png", "docx"];
  
  void extensaoValida(){
    print("Faça o upload do seu arquivo");
    String? arquivo = stdin.readLineSync()!;
    String extensao = arquivo.split('.').last;
      if (tiposPermitidos.contains(extensao)){
          print("Upload feito");
      } else {
          print("Arquivo inválido, por favor faça upload com as seguintes extensões ${tiposPermitidos.toString()}");
          extensaoValida();
        }
    }
    extensaoValida();
  }
- Dando uma nova chance no retorno de mês
import 'dart:io';
void main(){
  int numero = solicitarNumero();
  String mes = acharMes (numero); 
  print(mes);
}
int solicitarNumero(){ //função que verifica se a entrada é valida e não está vazia
  print("Digite um numero de 1 a 12");
   String? entrada = stdin.readLineSync();
   int? numero;
    if(entrada != null && entrada != ""){
       numero = int.tryParse(entrada);
      } if (numero != null && numero >=1 && numero <=12){
         return numero;
    } else {
        print("Numero invalido. Digite um numero valido");
        return solicitarNumero();
      }
    }
    
  String acharMes (int numero){
    switch (numero){
      case 1:
      return ("Janeiro");
      case 2:
      return ("Fevereiro");
      case 3:
      return ("Março");
      case 4:
      return ("Abril");
      case 5:
      return ("Maio");
      case 6:
      return ("Junho");
      case 7:
      return ("Julho");
      case 8:
      return ("Agosto");
      case 9:
      return ("Setembro");
      case 10:
      return ("Outubro");
      case 11:
      return ("Novembro");
      case 12:
      return ("Dezembro");
      default: 
      return ("Não é um mes valido");
    }
  }
- Criando a função de depósito e fazendo sua validação
import 'dart:io';
void main() {
double saldo = 1000.0; // Saldo inicial em reais
  print('Boas-vindas ao seu banco digital!');
  print('Seu saldo atual é de: R\$ ${saldo.toStringAsFixed(2)}');
  String operacao = escolhaOperacao(); // a variavel operacao recebe o retorno da função escolhaOperacao - deposito, retirada, transferencia, pagamento 
  double valor = escolheValor(operacao, saldo); // a variavel valor recebe o valor escolhido para a operação, levando em conta se é credito ou debito
  double saldoFinal = operacoes(operacao, saldo, valor); // saldo final traz o retorno da conta feita em operacoes, que pega a operação escolhida, o saldo inicial e o valor escolhido
  
  print("Operação realizada.");
  print("Seu saldo final é R\$ ${saldoFinal.toStringAsFixed(2)}");
}
double soma(double saldo, double valor){
  return (saldo + valor);
}
double subtracao(double saldo, double valor){
  return (saldo - valor);
}
double operacoes(String operacao, double saldo, double valor){
  switch (operacao) {
  case "deposito": 
  return soma (saldo, valor);
  case "retirada":
  case "transferencia":
  case "pagamento":
  return subtracao (saldo, valor);
  default:
    print("Operação desconhecida");
    return saldo;
  }
}
String escolhaOperacao(){
  List<String> operacoes = <String>["deposito", "retirada", "transferencia", "pagamento"];
  
  print("Digite a operação que deseja realizar: deposito, retirada, transferencia, pagamento");
  String? operacao = stdin.readLineSync();
  if (operacao != null && operacoes.contains(operacao)){
    return operacao;
  } else {
    print("Operação inválida. Por favor tente de novo");
    return escolhaOperacao();
  }
}
double escolheValor(String operacao, double saldo) {
  print("Digite o valor da operação:");
  String? entrada = stdin.readLineSync();
  if (entrada != null && entrada.isNotEmpty) {
    double? valor = double.tryParse(entrada);
    if (valor == null || valor <= 0) {
      print("Valor inválido.");
      return escolheValor(operacao, saldo);
    }
    if (operacao != "deposito" && valor > saldo) {
      print("Saldo insuficiente.");
      return escolheValor(operacao, saldo);
    }
    return valor;
  } else {
    print("Entrada inválida.");
    return escolheValor(operacao, saldo);
  }
}