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!!
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!!
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? ^^
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 ^^
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!
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!