Solucionado (ver solução)
Solucionado
(ver solução)
12
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

12 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

Oi, Cleber!

Seu repositório e ele está vazio, então não consigo visualizar os arquivos do seu projeto no GitHub. Uma forma bem simples de enviar seus arquivos é assim:

  1. Acesse o seu repositório no GitHub.

  2. Clique na opção "uploading an existing file", como mostro a seguir:

    Passo 2

  3. Depois, arraste todos os arquivos do seu projeto para a área que aparecer.

  4. Em seguida, clique no botão "Commit changes" para finalizar.

Passo 1

Dessa forma, conseguirei ver seu completo completo, testar e te ajudar melhor.

Fico no aguardo!

Acho que agora foi, Professor!

Tomara que esteja certo...

Obrigado!

https://github.com/berquo44/684572

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

Olá Cleber! Tudo bem?

Obrigado por compartilhar seu código, isso facilita muito na hora de fazer testes.

Quanto ao seu erro ele acontece no arquivo dart_exceptions, no qual ficou faltando a importação do SenderIdInvalidException, para reparar isso basta adicionar a seguinte linha no arquivo:

import 'controllers/bank_controller.dart';
import 'exceptions/bank_controller_exceptions.dart'; //adicione essa linha
import 'models/account.dart';

Por fim, falta um "}", no final do código, ficando assim:

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

import 'controllers/bank_controller.dart';
import 'exceptions/bank_controller_exceptions.dart';  //adicione essa linha
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,
    );
    print(result);
  } on SenderIdInvalidException catch (e) {
    print("O ID '${e.idSender}' não é um ID válido.");
  }
}

Resultado:

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

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

Espero ter ajudado!

Abraços e bons estudos!

Professor, primeiramente...Desculpe-me por eu ter somente agora me debruçado sobre a explicação, tive de resolver uns problemas que apareceram de ultimo momento, e só fui ter como pegar a resolução agora.

Muito Obrigado. Resolvi. No final, consegui resolver. Só um detalhe, se puder explicar... a resposta da aula só foi executada perfeitamente, quando eu tirei os : import 'dart:io'; import 'dart:math';

que o próprio programa sugeriu. Quando coloco o código todo igual ao do senhor, continua dando "error". Apenas por causa disto. Eu só consegui resolver, pq o próprio programa sugeriu esta modificação. Insira aqui a descrição dessa imagem para ajudar na acessibilidade

este print, que o senhor pode ver, esta rodando, mas sem osimport 'dart:io'; import 'dart:math.

Porquê?

No mais, obrigado. É apenas um detalhe, mas o real problema foi resolvido e com a grata ajuda do senhor. Obrigado.

solução!

Oi, Cleber!

Esses imports só são necessários se você estiver usando funcionalidades específicas dessas bibliotecas, como leitura do terminal (stdin.readLineSync()) ou geração de números aleatórios (Random()).

Como o código não usa nada dessas duas bibliotecas, o próprio Dart (ou o editor que você está usando) entende que esses imports são desnecessários e podem causar avisos ou erros.

Então, pode deixar assim mesmo, sem esses imports.

Em resumo, o Dart só está evitando o uso desnecessário de algumas bibliotecas.

Abraços, e bons estudos!

Obrigado!