1
resposta

Minha Resolução

import 'dart:io';
import 'package:dart_assincronismo/models/account.dart';
import 'package:dart_assincronismo/services/account_service.dart';
import 'package:uuid/uuid.dart';

class AccountScreen {
  final AccountService _accountService = AccountService();

  void initializeStream(){
    _accountService.streamInfos.listen((event) => print(event));
  }

  void runChatBot() async{
    print('Bom dia! Eu sou o Lewis, assistente do Banco d\'Ouro!');
    print('Que bom te ter aqui com a gente.\n');

    bool isRunning = true;
    while (isRunning) {
      print('Como eu posso te ajudar? (digite um número desejado)');
      print('1 -  Ver todas as contas.');
      print('2 -  Adicionar nova conta.');
      print('3 -  sair\n');

      String? input = stdin.readLineSync();

      if (input != null) {
        switch (input) {
          case '1': {
            await _getAllAccounts();
            break;             
          }

          case '2': {
            print('Digite o nome e sobrenome:');
            String? nameComplete = stdin.readLineSync();
            
            print('Digite o valor inicial da conta:');
            String? balance = stdin.readLineSync();

            if (nameComplete != null && balance != null && double.tryParse(balance) != null) {
              double doubleBalance = double.parse(balance);
              await _addExampleAccount(nameComplete, doubleBalance);

            } else {
              print('Erro! Digite os dados corretamente');
            }
            break;
          }

          case '3': {
            isRunning = false;
            print('Te vejo na próxima. ');
            break;
          }

          default: {
            print('Não entendi. Tente novamente');
          }
        }
      }    
    }
  }

  Future<void> _getAllAccounts() async{
    List<Account> listAccount = await _accountService.getAll();
    print(listAccount);
  }

  Future<void> _addExampleAccount(String name, double balance) async {
    List<String> listName = name.split(' ');

    //Gerando o ID
    Uuid uuid = Uuid();
    String v1 = uuid.v1();

    Account exemple = Account(
      id: v1, 
      name: listName.first, 
      lastName: listName.last, 
      balance: balance
    );

    await _accountService.addAccount(exemple);
  }
}
1 resposta

Oi, Luís! Como vai?

Agradeço por compartilhar seu código com a comunidade Alura.

Sua solução ficou bem estruturada, com uso adequado de async/await para tratar chamadas assíncronas. A navegação por menu usando stdin.readLineSync() também está clara e objetiva, facilitando a experiência do usuário com o assistente Lewis.

Uma dica interessante para o futuro é usar o método toStringAsFixed() para formatar valores monetários com duas casas decimais. Veja este exemplo:


double saldo = 1530.5;

print('Saldo: R\$ ${saldo.toStringAsFixed(2)}');

O código acima exibe o valor com duas casas decimais, o que é útil para exibir saldos bancários com precisão.

Qualquer dúvida que surgir, compartilhe no fórum. Abraços e bons estudos!

Alura

Conte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!