1
resposta

Duvida em como criar um objeto de um retorno Future<?>

Estou fazendo o codigo um pouco diferente do curso, mas é basicamente o mesmo somente com as classes diferente, porem estou com duvida em como eu crio um objeto do tipo Cliente porem o retorno do metodo é Future

Tenho estes 2 codigos e quero passar para o metodo Auth, o cliente retornado pelo findCliente(), a forma que eu tentei foi essa:

Cliente cliente = findCliente(1) as Cliente;
Auth(cliente);

Future<Cliente> findCliente(int cpf) async {
  final Response response =
  await client.get(Uri.parse('http://192.168.0.16:8080/cliente/$cpf'));
  final Map<String, dynamic> decodedJson = jsonDecode(response.body);
  final Cliente cliente = Cliente(
    decodedJson['cpf'],
    decodedJson['email'],
    decodedJson['nomeCompleto'],
    decodedJson['senha'],
    decodedJson['numeroCelular'],
    decodedJson['fotoPerfil'],
    decodedJson['logradouro'],
    decodedJson['tipoUsuario'],
  );
  return cliente;
}

Future<String> Auth(Cliente cliente) async {
  final Map<String, dynamic> clienteMap = {
    'cpf': cliente.cpf,
    'email': cliente.email,
    'nomeCompleto': cliente.nomeCompleto,
    'senha': cliente.senha,
    'numeroCelular': cliente.numero_cel,
    'fotoPerfil': cliente.foto_perfil,
    'logradouro': cliente.logradouro,
  };

  final String clienteJson = jsonEncode(clienteMap);

  final Response response =
  await client.post(Uri.parse('http://192.168.0.16:8080/auth'),
      headers: {
        'Content-type': 'application/json',

      },
      body: clienteJson);

  Map<String, dynamic> json = jsonDecode(response.body);
  final String token = json['token'];
  final String tipo = json['tipo'];

  return tipo + token;
}
1 resposta

Olá, Leandro! Tudo bem?

Pelo que entendi, você está com dúvida em como criar um objeto do tipo Cliente a partir do retorno de um método que retorna um Future.

No seu código, você está chamando o método findCliente(1) e tentando atribuir o retorno a uma variável do tipo Cliente. No entanto, a forma como você está fazendo não está correta.

Quando um método retorna um Future, significa que ele retornará um valor do tipo T no futuro, de forma assíncrona. Portanto, para obter o valor do Future, você precisa esperar a sua conclusão utilizando o await.

Aqui está uma sugestão de como você pode fazer isso:

Cliente cliente = await findCliente(1);
Auth(cliente);

Dessa forma, o await irá aguardar a conclusão do método findCliente(1) e o valor retornado será atribuído à variável cliente.

Espero ter ajudado e bons estudos!