A respeito da atividade:
- Implemente o método getAccountById que retorna apenas uma Account baseado no id recebido por parâmetro. Você deve decidir como o programa vai se comportar se o id for inválido.
Eu tive uma primeira forma de fazer que seria:
Future<Account?> getAccountById(String id) async {
List<Account> accounts = await getAll();
// O orElse deve retornar um Account? e não null diretamente
Account? accountFound = accounts.firstWhere(
(element) => element.id == id,
orElse: () => null, // Aqui você pode retornar null
);
return accountFound; // Retorna accountFound, que pode ser null
}
Mas eu me deparava com o erro "The returned type 'Null' isn't returnable from a 'Account' function, as required by the closure's context" e tentei contornar de algumas formas, como:
- tentar remover o null e retornar uma Account sem valor
- explicitar que o retorno poderia ser null mas nenhuma resolveu.
Então optei por remover o "OrElse()" que foi quando o código rodou
Future<Account?> getAccountById(String id) async {
List<Account> accounts = await getAll();
// O orElse deve retornar um Account? e não null diretamente
Account? accountFound = accounts.firstWhere(
(element) => element.id == id,
);
return accountFound;
}
e ainda adicionei uma outra função no mesmo arquivo para verificar o retorno e somente enviar a resposta na main, assim deixando o código modularizado e limpo:
void readAccountById(AccountService accountService, String id) {
accountService.getAccountById(id).then((account) {
if (account != null) {
print("Conta encontrada: ${account.toMap()}");
} else {
print("Conta não encontrada.");
}
}).catchError((error) {
print("Ocorreu um erro: $error");
});
}
Aqui seria a execução na main:
import 'package:dart_async/services/account_service.dart';
void main() {
// AccountScreen accountScreen = AccountScreen();
// accountScreen.initializeStream();
// accountScreen.runChatBot();
AccountService account = AccountService();
account.readAccountById(account, "ID001");
}
Gostaria de saber se tem alguma outra forma de ter resolvido e também se esta forma está correta. Agradeço desde já a tenção