2
respostas

exercício concluído

import 'dart:io';

void main() async {
  String user = '';
  var a = true;

  print('Starting...');
  await Delay().timer(3);
  //seleção de musica
  print('BOT: Selecione uma música');
  try {
    do {
      user = stdin.readLineSync().toString();

      print('Procurando...\n');

      if (Musics(user).isThisMusic()) {
        await Delay().timer(2);
        Musics(user).musicSelection();
        botTalk();
      } else if (user.contains('bye')) {
        await Delay().timer(1);
        a = false;
      } else {
        await Delay().timer(3);
        print('não tenho essa música em minha biblioteca :(\n'
            "Digite outra música, ou fale 'bye'");
      }
    } while (a);
  } catch (e) {
    print(e);
  } finally {
    Delay().timer(1);
    print('BOT: concluído');
  }
  print('desligando');
}

class Musics {
  String superman = 'superman';
  String mocking = 'mockingbird';
  String music;
  bool isThisAMusic = false;

  Musics(this.music);

  bool isThisMusic() {
    if (music.contains('superman') || music.contains('mockingbird')) {
      isThisAMusic = true;
    }
    return isThisAMusic;
  }

  musicSelection() {
    if (music == superman) {
      print("SUPERMAN - EMINEM\n"
          "But I do know one thing though\n"
          "Bitches, they come, they go\n"
          "Saturday through Sunday, Monday (Yeah-yeah)\n"
          "Monday through Sunday, yo\n"
          "Maybe I'll love you one day\n"
          "Maybe we'll someday grow\n"
          "Til then just sit your drunk ass on that fuckin' runway, ho\n"
          "Cause I can't be your Superman, can't be your Superman\n"
          "Can't be your Superman, can't be your Superman\n"
          "I can't be your Superman, can't be your Superman\n"
          "Can't be your Superman, your Superman, your Superman\n");
    } else if (music == mocking) {
      print('MOCKINGBIRD - EMINEM\n'
          "Now hush, little baby, don't you cry\n"
          "Everything's gonna be alright\n"
          "Stiffen that upperlip up, little lady, I told ya\n"
          "Daddy's here to hold ya through the night\n"
          "I know mommy's not here right now, and we don't know why\n"
          "We fear how we feel inside\n"
          "It may seem a little crazy, pretty baby\n"
          "But I promise: Momma's gon' be alright\n");
    }
  }
}

class Delay {
  Future timer(int timing) async {
    for (int i = 0; i < timing; i++) {
      await Future.delayed(Duration(seconds: 1));
    }
  }
}

void botTalk() {
  print("BOT: fale outra música ou diga 'bye' :)");
}

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

2 respostas

aqui eu forcei um erro Insira aqui a descrição dessa imagem para ajudar na acessibilidade

Olá, Vitor! Como vai?

Pelo que pude entender, você conseguiu concluir o exercício, mas não tem certeza se fez corretamente, certo?

Vamos lá, pelo que vejo, você fez um ótimo trabalho! Você criou uma função assíncrona, usou o async/await com Future.delayed para simular o tempo de resposta do bot, e também usou o try/catch/finally para lidar com possíveis exceções. Isso está de acordo com o que foi solicitado no exercício.

No entanto, percebi que faltou um detalhe: a criação de um objeto do tipo Future que retorne uma informação e o uso do .then() para manipular essa informação.

Para adicionar essa parte ao seu código, você poderia criar uma função que retorna um Future e que será resolvida depois de alguns segundos. Aqui está um exemplo:

Future<String> getMusicName() {
  return Future.delayed(Duration(seconds: 2), () => 'mockingbird');
}

E então, você pode usar o .then() para manipular a informação retornada por esse Future:

getMusicName().then((musicName) {
  print('A música selecionada é: $musicName');
});

Você pode adicionar esses códigos em qualquer lugar do seu código principal (main).

Espero ter ajudado e bons estudos!