1
resposta

[Projeto] Desafio: Chat Simulation - Meu código

Nesse primeiro arquivo, para uma melhor organização, separei as mensagens em lista.

msgs.dart

List<Map<String, dynamic>> cv01 = [
  {'user': 'João', 'msg': 'Bom dia, Mariana!'},
  {'user': 'Mariana', 'msg': 'Bom dia! Tudo bem?'},
  {'user': 'João','msg': 'Suave, e vc?'},
  {'user': 'Mariana','msg': 'Certinho.'},
  {'user': 'João','msg': 'Vamos iniciar nossa call? Temos muitas coisas para planejar.'},
  {'user': 'Mariana','msg': 'Realmente, vamos lá, João.'},
];

Já no arquivo principal, o Future é utilizado para esperar o fim da simulação, informando-o com o .then. Enquanto isso, cada mensagem é lida da lista do arquivo "msgs.dart", printando nome do usuário e sua mensagem. Try, catch, finally bem simples, onde o finally indica o enceramento da conversa. Ainda, simulei de maneira bem simples o tempo de leitura e digitação dos usuários entre os prints de cada mensagem com o async/await e Future.delayed, onde o tempo depende do tamanho de cada mensagem.

desafio.dart

import 'msgs.dart';

void main() async {
  String msg;
  String user;

  Future endSimulation = Future(() async {
    try {
      for (var item in cv01) {
        user = '${item['user']}';
        msg = '${item['msg']}';
        await processing(msg);
        conversation(user, msg);
      }
    } catch (e) {
      print(e);
    } finally {
      print('-- Encerrando conversa --');
    }
    return '-- Simulação encerrada --';
  }).then((value) => print('$value'));
}

// Calcula o tempo a ser utilizado na função "processing".
int funcDuration(String msg) => msg.length * 300;

// Simula o tempo de leitura e digitação do usuário, de maneira bem simples.
processing(String msg) async {
  return await Future.delayed(Duration(milliseconds: funcDuration(msg)));
}

// Printa o nome do usuário e sua mensagem.
conversation(String user, String msg) {
  print('$user: ' + msg);
}

SAIDA:

João: Bom dia, Mariana!
Mariana: Bom dia! Tudo bem?
João: Suave, e vc?
Mariana: Certinho.
João: Vamos iniciar nossa call? Temos muitas coisas para planejar.
Mariana: Realmente, vamos lá, João.
-- Encerrando conversa --
-- Simulação encerrada --
1 resposta

Oii Thassio, tudo bem?

O seu código tá bem estruturado e organizado! A separação das mensagens em uma lista no arquivo "msgs.dart" é uma abordagem inteligente para manter a organização do código. O uso de Future para esperar o fim da simulação e o uso de async/await para simular o tempo de leitura e digitação dos usuários são ótimas práticas para lidar com operações assíncronas.

Obrigada por compartilhar!

Um abraço e bons estudos.

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software