Solucionado (ver solução)
Solucionado
(ver solução)
8
respostas

[Dúvida] Intillij vs VSCode

Mesmo repetindo o código, eu não consigo ter o mesmo resultado em meu terminal do vídeo 06: Propriedades da SenderIdInvalidException

Eu necessito de ajuda, por favor!!

8 respostas

Fala Álvaro, de boa ?

Cara acho que pode ser por questões de versão e afins, uma coisa que talvez faça sentido é seguir sempre na mesma ferramenta que o instrutor esta usando, assim você já vai ganhando um pouco mais de confiança na hora que for fazer as coisas pq vão ser muito similares ao que o instrutor produziu em video.

No que você mandou, recomendo que mostre o seu código, o que ele exibe e o que deveria ser exibido, assim vamos conseguir entender o que tá rolando ai contigo

Como faço para enviar o código nessa configuração? ^^

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

Basta colocar entre 3 `` `

Main (dart_curso04_exceptions)

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

void main() {
  //Creating the bank
  BankController bankController = BankController();

  //Add account
  bankController.addAccount(
      id: "Elon",
      account:
          Account(name: "Elon Musgo", balance: 400, isAuthenticated: true));

  bankController.addAccount(
      id: "Digo",
      account:
          Account(name: "Diego Rosa", balance: 600, isAuthenticated: true));

  //Making transfer
  try{
    bool result = bankController.makeTransfer(idSender: "eueu", idReceiver: "Elon", amount: 200);
    //Watching result
    print(result);
  } on SenderIdInvalidException catch (e){
    print("O ID '${e.idSender}' do remetente não é válido");
  }



  try {
    bool result = bankController.makeTransfer(
        idSender: "Digo", idReceiver: "Elon", amount: 200);

    //Watching result
    print(result);
  } on SenderIdInvalidException catch (e) {
    print("O ID remetente '${e.idSender}' não é válido");

  } on ReceiverIdInvalidException catch (e) {
    print("O ID remetente '${e.idReceiver}' não é válido");

  } on SenderBalanceLowerThanAmountException catch (e) {
    print("O usuário ID remetente '${e.idSender}' não está autenticado ");

  }
}

bank_controller

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}) {
    // Check if idSender is valid
    if (!verifyId(idSender)) {
      throw SenderIdInvalidException(idSender: idSender);
    }

    // Check if idReceiver is valid
    if (!verifyId(idReceiver)) {
      throw ReceiverIdInvalidException(idReceiver: idReceiver);
    }
  }

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

  // Check if Sender is authenticated 
  if (!accountSender.isAuthenticated) {
    throw SenderNotAuthenticatedException(idSender: idSender);
  }
  // Check if Receiver has enough value
  if (accountSender.balance < amount) {
    throw SenderBalanceLowerThanAmountException();
  }

  // If everything has been OK, so make the transfer
  accountSender.balance -= amount;
  accountReceiver.balance += amount;
  {
  return true;
  }


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

bank_controller_exceptions

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

class ReceiverIdInvalidException implements Exception {
  String idReceiver;
  ReceiverIdInvalidException({required this.idReceiver});
}

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

class SenderBalanceLowerThanAmountException implements Exception {
  String idSender;
  double senderBalance;
  double amount;
}

Erro Mostrado no Output

controllers/bank_controller.dart:30:3: Error: Expected a class member, but got 'if'.
  if (!accountSender.isAuthenticated) {
  ^^
controllers/bank_controller.dart:30:6: Error: Expected an identifier, but got '('.
Try inserting an identifier before '('.
  if (!accountSender.isAuthenticated) {
     ^
controllers/bank_controller.dart:30:7: Error: Expected an identifier, but got '!'.
Try inserting an identifier before '!'.
  if (!accountSender.isAuthenticated) {
      ^
controllers/bank_controller.dart:30:8: Error: Expected ')' before this.
  if (!accountSender.isAuthenticated) {
       ^^^^^^^^^^^^^
controllers/bank_controller.dart:34:3: Error: Expected a class member, but got 'if'.
  if (accountSender.balance < amount) {
  ^^
controllers/bank_controller.dart:34:6: Error: Expected an identifier, but got '('.
Try inserting an identifier before '('.
  if (accountSender.balance < amount) {
     ^
controllers/bank_controller.dart:34:29: Error: Expected an identifier, but got '<'.
Try inserting an identifier before '<'.
  if (accountSender.balance < amount) {
                            ^
controllers/bank_controller.dart:34:31: Error: Expected ')' before this.
  if (accountSender.balance < amount) {
                              ^^^^^^
controllers/bank_controller.dart:39:3: Error: A method declaration needs an explicit list of parameters.
Try adding a parameter list to the method declaration.
  accountSender.balance -= amount;
  ^^^^^^^^^^^^^
controllers/bank_controller.dart:39:25: Error: Expected '{' before this.
  accountSender.balance -= amount;
                        ^^

Olá, Professor Matheus! Esqueça de mim não, por favor ^^

solução!

Olá, Álvaro! Tudo bem?

Primeiramente peço desculpas pela demora em dar uma resposta, posso tentar te ajudar caso ainda não tenha sido resolvido.

Pelas mensagens de erro que você mandou, podemos ver que o erro está no arquivo bank_controller.dart, e se olharmos bem podemos ver que bem no finalzinho de makeTransfer há uma chave { que não precisa:

  // If everything has been OK, so make the transfer
  accountSender.balance -= amount;
  accountReceiver.balance += amount;

    //ESSA CHAVE AQUI:
 {
  return true;
  }

E também logo após o segundo if da função makeTransfer:

    // Check if idReceiver is valid
    if (!verifyId(idReceiver)) {
      throw ReceiverIdInvalidException(idReceiver: idReceiver);
    }
    //ESSA CHAVE AQUI:
  }

Você pode tentar retirar essas chaves que falei e rodar novamente, pois testando aqui, pode ser isso o motivo do erro.

Espero ter ajudado, bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado. ✓

Olá Jhoisnáyra, muito obrigado pela ajuda!

Realmente eram essas duas chaves que me fecharam as portas, rs.

Tenho outro 'problema':

bank_controller_exceptions.dart

class SenderBalanceLowerThanAmountException implements Exception {
  String idSender;
  double senderBalance;
  double amount;
}

Aparecendo as seguintes mensagens: "Non-nullable instance field 'idSender / 'senderBalance' / 'amount' must be initialized.\nTry adding an initializer expression, or a generative constructor that initializes it, or mark it 'late'.",

Oi, Álvaro!

Isso deve estar acontecendo porque as variáveis da sua classe não estão sendo inicializadas, ou seja, elas não recebem um valor inicial, então o Flutter te sugere que inicialize com um valor, use um construtor ou defina ela como late (que significa que será inicializada posteriormente).

Nesse caso, o instrutor opta por usar um construtor para isso:

class SenderBalanceLowerThanAmountException implements Exception {
  String idSender;
  double senderBalance;
  double amount;

// Construtor da classe:
  SenderBalanceLowerThanAmountException({
    required this.idSender,
    required this.senderBalance,
    required this.amount,
  });
}

Dessa maneira, a classe receberá obrigatoriamente os valores de idSender, senderBalance, amount ao ser instanciado um objeto dela. E acredito que assim o erro deva sumir.

Se quiser saber mais sobre construtores recomendo a leitura do artigo Construtores no Dart: conhecendo tipos de construtores e como usá-los, lá comento sobre vários tipos de construtores, a importância deles e até mesmo os tipos de parâmetros que podemos usar.

Espero ter ajudado, caso contrário vamos continuar tentando. Bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado. ✓