Hoje fui retormar os estudos e o token do meu usuário estava expirado.
Para resolver o problema fiz a seguinte alteração:
- Classe journal_service.dark
Future<List<Journal>> getAll({required String id, required String token}) async {
http.Response response = await client.get(
Uri.parse("${url}users/$id/journals"),
headers: {"Authorization" : "Bearer $token"});
List<Journal> result = [];
if (response.statusCode != 200) {
//TODO: Criar uma exceção personalizada
return result;
}
List<dynamic> jsonList = json.decode(response.body);
for (var jsonMap in jsonList) {
result.add(Journal.fromMap(jsonMap));
}
return result;
}
Se houver um retorno diferente de 200, significa que houve um erro ou problema. Eu contornei neste primeiro momento retornando um List de Jounal vazio.
- Classe home_screen.dart
if(token != null && email != null && id != null){
_journalService.getAll(id: id.toString(), token: token).then((List<Journal> listJournal) {
if(listJournal.isNotEmpty){
setState(() {
database = {};
for (Journal journal in listJournal) {
database[journal.id] = journal;
}
if (_listScrollController.hasClients) {
final double position = _listScrollController.position
.maxScrollExtent;
_listScrollController.jumpTo(position);
}
});
}else{
Navigator.pushReplacementNamed(context, "login");
}
});
}else{
Navigator.pushReplacementNamed(context, "login");
}
Na chamada ao serviço getAll dentro do método refresh( ), eu verifico se o result está vazio. Se estiver, ele encaminha direto para a tela de Login.
Depois irei criar uma classe de Exception para tratar os erros de retorno. Ele retornar várias frases. tem um tratamento relacionado a isso dentro da Classe auth_service em um switch(content) que pode ser utilizado posteriormente.