6
respostas

Não estou conseguindo importar SenderIdInvalidException

Não estou conseguindo importar SenderIdInvalidException, estou fazendo igual ao professor e não sei onde está dando error. Insira aqui a descrição dessa imagem para ajudar na acessibilidade Insira aqui a descrição dessa imagem para ajudar na acessibilidade Insira aqui a descrição dessa imagem para ajudar na acessibilidade

6 respostas

Olá Cleber!

Nesse caso, gostaria de testar o seu código, através da imagem, não observei erro. Para que eu possa fornecer uma resposta mais assertiva. Compartilhe o seu código e o link da aula em que você está, por favor.

Agradeço desde já!

Fico no aguardo e a disposição!

O link da aula... https://cursos.alura.com.br/course/dart-lidando-exceptions-null-safety/task/108741

não sei se estou passando da maneira certa, mas copiei tudo: Insira aqui a descrição dessa imagem para ajudar na acessibilidade

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

código1:

 class SenderIdInvalidException implements Exception{
  String idSender;
  SenderIdInvalidException({required this.idSender});
}
class ReceiverIdInvalidException implements Exception{}
class SenderNotAuthenticatedException implements Exception{}
class SenderBalanceLawerThanAmountException implements Exception{} 

código2:

import '../models/account.dart';
import '../exceptions/bank_controller_exceptions.dart';

class BankController {
  final Map<String, Account> _database = {};

  addAccount({required String id, required Account account}) {
    _database[id] = account;
  }

  bool makeTransfer(
      {required String idSender,
      required String idReceiver,
      required double amount}) {
    // Verificar se ID de remetente é válido
    if (!verifyId(idSender)) {
      throw SenderIdInvalidException(idSender: idSender);
    }

    // Verificar se ID de destinatário é válido
    if (!verifyId(idReceiver)) {
      throw ReceiverIdInvalidException();
    }

    Account accountSender = _database[idSender]!;
    Account accountReceiver = _database[idReceiver]!;

    // Verificar se o remetente está autenticado
    if (!accountSender.isAuthenticated) {
      throw SenderIdInvalidException();
    }

    // Verificar se o remetente possui saldo suficiente
    if (accountSender.balance < amount) {
      throw SenderBalanceLawerThanAmountException();
    }

    // Se tudo estiver certo, efetivar transação
    accountSender.balance -= amount;
    accountReceiver.balance += amount;

    return true;
  }

  bool verifyId(String id) {
    return _database.containsKey(id);
  }
}

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

codigo 3:

 import 'dart:io';
import 'dart:math';

import 'controllers/bank_controller.dart';
import 'models/account.dart';

void main() {
  // Criando o banco
  BankController bankController = BankController();

  // Adicionando contas
  bankController.addAccount(
      id: "Ricarth",
      account:
          Account(name: "Ricarth Lima", balance: 400, isAuthenticated: true));

  bankController.addAccount(
      id: "Kako",
      account:
          Account(name: "Caio Couto", balance: 600, isAuthenticated: true));

  // Fazendo transferência
  try{
    bool result = bankController.makeTransfer(
        idSender: "Kako222", idReceiver: "Ricarth", amount: 50);
  } on Sed

  // Observando resultado
  print(result);
}

Insira aqui a descrição dessa imagem para ajudar na acessibilidade O códigoi 2 ficou confuso, ve se está melhor :

 import '../models/account.dart';
import '../exceptions/bank_controller_exceptions.dart';

class BankController {
  final Map<String, Account> _database = {};

  addAccount({required String id, required Account account}) {
    _database[id] = account;
  }

  bool makeTransfer(
      {required String idSender,
      required String idReceiver,
      required double amount}) {
    // Verificar se ID de remetente é válido
    if (!verifyId(idSender)) {
      throw SenderIdInvalidException(idSender: idSender);
    }

    // Verificar se ID de destinatário é válido
    if (!verifyId(idReceiver)) {
      throw ReceiverIdInvalidException();
    }

    Account accountSender = _database[idSender]!;
      Account accountReceiver = _database[idReceiver]!;
    // Verificar se o remetente está autenticado
    if (!accountSender.isAuthenticated) {
      throw SenderIdInvalidException();
    }

    // Verificar se o remetente possui saldo suficiente
    if (accountSender.balance < amount) {
      throw SenderBalanceLawerThanAmountException();
    }

    // Se tudo estiver certo, efetivar transação
    accountSender.balance -= amount;
    accountReceiver.balance += amount;

    return true;
  }

  bool verifyId(String id) {
    return _database.containsKey(id);
  }
}

Olá Cleber, tudo bem contigo?

Observei alguns pequenos erros no seu código e acredito que os reparando, vai dar certo.

O erro provavelmente está aqui no arquivo 2 (BankController), na parte onde você verifica se o remetente está autenticado:

if (!accountSender.isAuthenticated) {
  throw SenderIdInvalidException();
}

O correto seria:

if (!accountSender.isAuthenticated) {
    throw SenderIdInvalidException(idSender: idSender);
}

Isso porque SenderIdInvalidException requer um parâmetro obrigatório idSender, então lançar essa exceção sem um argumento gera erro.


Outro possível erro está no arquivo 3 (main.dart). A instrução try foi iniciada, mas o bloco on está incompleto:

try{
  bool result = bankController.makeTransfer(
      idSender: "Kako222", idReceiver: "Ricarth", amount: 50);
} on Sed

Aqui parece que você começou a escrever SenderIdInvalidException, mas não concluiu. O correto seria algo assim:

try {
bool result = bankController.makeTransfer(
idSender: "Kako222", idReceiver: "Ricarth", amount: 50);
print(result);
} on SenderIdInvalidException catch (e) {
print("O ID '${e.idSender}' não é um ID válido.");
}

Por favor, verifique esses pontos, em caso de persistência, vou pedir para subir o seu código no GitHub e me enviar o link:

Estou à disposição para seu rápido retorno aos estudos.

Espero ter ajudado! Bons estudos!

Sucesso

Oi, professor. Obrigado por ter respondido, isto resolveu o problema em parte. Eu coloquei o Sen (esqueci de explicar) justamente pq quando coloco o Sen (não chama). Nem se colocar todo o código, como mostro aqui (abaixo no print). De repente é mais simples que subir o código no GitHub:

Ve se o senhor consegue acessar o meu projeto: https://github.com/berquo44/684572

Desculpe a demora, só tive tempo de responde e agradecer a equipe, pois estava em transito, só consegui acessar agora.

Espero que resolva.

Muito obrigado!

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

Joguei o GitHub par ver se está correto. Mais uma vez obrigado pelo suporte!

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