Olá aqui a resposta do meu desafio:
class ReceiverNotAuthenticatedException {
String idReceiver;
static const report = "ReceiverNotAuthenticatedException";
ReceiverNotAuthenticatedException({required this.idReceiver});
@override
String toString() {
// TODO: implement toString
return "$report\nID Receiver $idReceiver não está autenticado";
}
}
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}) {
if(!accountReceiver.isAuthenticated) {
throw ReceiverNotAuthenticatedException(idReceiver: idReceiver);
}
// Se tudo estiver certo, efetivar transação
accountSender.balance -= amount;
accountReceiver.balance += amount;
return true;
}
}
void main() {
// Criando o banco
BankController bankController = BankController();
// Adicionando contas
bankController.addAccount(
id: "Ricarth",
account:
Account(name: "Ricarth Lima", balance: 400, isAuthenticated: false));
bankController.addAccount(
id: "Kako",
account:
Account(name: "Caio Couto", balance: 600, isAuthenticated: true));
try {
// Fazendo transferência
bool result = bankController.makeTransfer(
idSender: "Kako", idReceiver: "Ricarth", amount: 300);
// Observando resultado
if(result) {
print("Transação concluida com sucesso!");
}
} on ReceiverNotAuthenticatedException catch(e) {
print(e);
} on Exception {
print("Algo deu errado!");
}
}