Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Lista de exercícios

Atividade 01: Ler dados de nova conta no teclado
Atividade 02: Atualizar o médoto

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

class AccountScreen {
  final AccountService _accountService = AccountService();
  final Uuid _uuid = Uuid();

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

//  NOVO MÉTODO: Exibe o cabeçalho de boas-vindas
  void displayHeader() {
    print("--------------------------------------------------");
    print("       BEM-VINDO(A) AO BANCO D'OURO \n");
    print("     Atendimento Rápido e Seguro :  Lewis");
    print("--------------------------------------------------");
    print("");
  }

  void runChatBot() async {

    bool isRunning = true;
    while (isRunning) {
      print("Como eu posso te ajudar? (digite o número desejado)");
      print("1 - Ver todas sua 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("Qual o nome completo da pessoa?");
            String? name = stdin.readLineSync();

            if (name != null) {
              print("Qual o saldo inicial da conta?");
              String? balanceString = stdin.readLineSync();

              if (balanceString != null) {
                double? balance = double.tryParse(balanceString);

                if (balance != null) {
                  // Separar Nome e Sobrenome e chamar a nova função de adição
                  await _readAndAddAccount(name, balance);
                } else {
                  print("Valor de saldo inválido. Tente novamente.");
                }
              }
            }
              break;
            }
          case "3":
            {
              isRunning = false;
              print("Te vejo na próxima.");
              break;
            }
          default:
            {
              print("Não entendi. Tente novamente.");
            }
        }
      }
    }
  }

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

  // Novo método para tratar a string de nome e chamar o serviço assíncrono
  _readAndAddAccount(String fullName, double balance) async {
    List<String> parts = fullName.split(" ");
    String firstName = parts.isNotEmpty ? parts.first : "Desconhecido";
    String lastName = parts.length > 1 ? parts.sublist(1).join(" ") : "Não Informado";

    // v4 gera um ID aleatório (version 4) - temos algo em torno de 7 versoões de geração de IDs
    String newId = _uuid.v4();

     // Geração da nova Account com os dados lidos + ID único
    Account newAccount = Account(
      id: newId,
      name: firstName,
      lastName: lastName,
      balance: balance,
    );
    await _accountService.addAccount(newAccount);
  }
}
1 resposta
solução!

Olá, José, como vai?

Seu código está bem organizado e segue corretamente a proposta das atividades, utilizando stdin para capturar dados, separando nome e sobrenome e criando a nova conta com UUID. A lógica do fluxo no runChatBot também está consistente e permite uma boa interação no terminal.

Parabéns pelo avanço e continue compartilhando suas soluções. O fórum está à disposição.

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