Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

Switch

Com a nova atualização precisa ser usado o default... logo, acrescentei, mas porque ao fazer o teste com algo que não tem no Enum igual o prof fez deu errado??

void main() {
  //escolherMeioTransporte(0);
  escolherMeioTransporteEnum(Transporte.skate);
}

void escolherMeioTransporte(int locomocao) {
  if (locomocao == 0) {
    print('Vou de CARRO para a aventura!');
  } else if (locomocao == 1) {
    print('Vou de BIKE para a aventura!');
  } else {
    print('Vou para a aventura!');
  }
}

void escolherMeioTransporteEnum(Transporte locomocao) {
  // if (locomocao == Transporte.carro){
  // print('Vou de CARRO para a aventura!');
  //} else if (locomocao == Transporte.bike){
  // print('Vou de BIKE para a aventura!');
  //} else{
  // print('Vou para a aventura!');
  //}

  switch (locomocao) {
    case Transporte.carro:
      print('Vou de CARRO para a aventura');
      break;
    case Transporte.bike:
      print('Vou de BIKE para a aventura');
      break;
    case Transporte.onibus:
      print('Vou de ÔNIBUS para a aventura!');
    default:
      print('Estou indo para a aventura, isso é o que importa');
      break;
  }
}

enum Transporte {
  carro,
  bike,
  onibus,
  metro,
  trem,
  aviao,
  caminhando,
}

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

3 respostas

E aí, Carlos!

Entendi o que você fez aí. O lance é que no Switch, quando você usa o case, ele executa o bloco de código até encontrar um break. No teu código, parece que tá faltando um break depois do case Transporte.onibus, e isso faz com que ele continue executando os casos seguintes.

Tipo, olha só como ficaria:

switch (locomocao) {
  case Transporte.carro:
    print('Vou de CARRO para a aventura');
    break;
  case Transporte.bike:
    print('Vou de BIKE para a aventura');
    break;
  case Transporte.onibus:
    print('Vou de ÔNIBUS para a aventura!');
    break; // Esse break é importante!
  default:
    print('Estou indo para a aventura, isso é o que importa');
    break;
}

Isso devia resolver o problema. Se continuar dando erro, dá um grito aí!

Abraço!

Acrescentei o break antes do default, porém continua com o erro... Fui pesquisar no GPT e ele falou isso a respeito do Enum:

"Em Dart, ao contrário de algumas outras linguagens, o tipo de enumeração é fechado e você só pode usar os valores explicitamente definidos dentro do enum. Isso significa que não é possível atribuir ou comparar valores que não fazem parte do enum diretamente.

Se você tentar usar um valor que não está presente no enum, o Dart emitirá um erro durante a compilação. Isso é uma característica de segurança da linguagem para garantir que você esteja trabalhando apenas com valores válidos do enum."

O curso então está desatualizado a respeito disso, ou continua tendo algum erro a respeito do meu código?

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

solução!

Fala Carlos, tudo bem?

O erro está ocorrendo por conta de skate não estar dentro do seu ENUM, então ajuste seu enum para:

enum Transporte {
  carro,
  bike,
  onibus,
  metro,
  trem,
  aviao,
  caminhando,
  skate,
}

Se não fizer isso, quando o código verificar se existe um skate para comparar, ele não vai encontrar e retornar um erro, como é o caso do que está acontecendo.

Qualquer dúvida estarei à disposição :)