Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Problema de token expirado

Hoje fui retormar os estudos e o token do meu usuário estava expirado.

Para resolver o problema fiz a seguinte alteração:

  1. 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.

  1. 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.

1 resposta
solução!

Oi Rafael, tudo bem?

Agradeço por compartilhar a solução para o problema que você encontrou no projeto. É bom saber que você identificou a causa raiz e encontrou uma maneira de corrigir o erro.

Muito obrigada por contribuir com a comunidade!

Um abraço e bons estudos.

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software