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

Desafio: seu futuro ainda não está escrito

Não sei se era esse o intuito da atividade, mas fiz o que veio na cabeça

void main(List<String> args) async {
  String usuario = "não";
  try {
    talkFunc(usuario);
  } catch (e) {
    print(e);
  } finally {

    if (usuario == 'não') {
      print('O usuário respondeu "$usuario".');
    } else {
      await Future.delayed(Duration(seconds: 9));
      print('---- Conversa encerrada! ----');
    }
  }
}

Future talkFunc(String resposta) async {
  if (resposta == 'não') {
    return Exception();
  }
  print('João: Bom dia, grupo!');
  await Future.delayed(Duration(seconds: 2));
  print('Mariana: Bom dia! Tudo bem?');
  await Future.delayed(Duration(seconds: 2));
  print('João: Suave, e vc?');
  await Future.delayed(Duration(seconds: 2));
  print('Mariana: Certinho.');
  await Future.delayed(Duration(seconds: 1));
  return encerradoFunc().then((value) => print(value));
}

Future<String> encerradoFunc() async {
  return 'Conversa está encerrando...';
}
2 respostas
solução!

Fala Guilherme! De boa ?

Cara acho que tu pegou a essencia de como Futures funcionam no dart, acho que era bem por ai mesmo :D

Achei muito bacana a sua solução. Vou deixar a minha solução do desafio também, quando observamos outras solução pode ampliar nossa visão sobre o problema.

import 'dart:math';

Future<String> chat(String personA, String personB) async {
  // Gera um erro em 50% dos
  if (Random().nextInt(10) < 5) {
    throw Exception('Erro ao carregar as mensagens');
  }

  await Future.delayed(
      Duration(seconds: 2), () => print('[$personA] Bom dia, grupo!'));
  await Future.delayed(
      Duration(seconds: 2), () => print('[$personB] Bom dia! Tudo bem?'));
  await Future.delayed(
      Duration(seconds: 2), () => print('[$personA] Suave, e vc?'));
  await Future.delayed(
      Duration(seconds: 2), () => print('[$personB] Certinho.'));
  await Future.delayed(Duration(seconds: 3));
  return Future(() => 'Fim da conversa');
}

void main() async {
  print('Inicio da conversa');
  try {
    await chat('Maria', 'Pedro').then((value) => print(value));
  } catch (e) {
    print(e);
  } finally {
    print('Fim da execução!');
  }
}