Exemplo de como fazer uma requisição POST usando SHELF em Flutter

Tempo de leitura: 2 minutes

Aqui está um exemplo de como fazer uma requisição POST usando o pacote shelf em Flutter e passando um objeto no corpo da requisição:

import 'dart:convert';
import 'package:shelf/shelf.dart' as shelf;
import 'package:shelf/shelf_io.dart' as shelf_io;
import 'package:shelf_proxy/shelf_proxy.dart';

void main() {
  final handler = const shelf.Pipeline()
      .addMiddleware(shelf.logRequests())
      .addHandler(_handleRequest);

  shelf_io.serve(handler, 'localhost', 8080).then((server) {
    print('Servidor rodando em http://${server.address.host}:${server.port}');
  });
}

shelf.Response _handleRequest(shelf.Request request) {
  if (request.method == 'POST') {
    // Extrai o objeto do corpo da requisição
    final body = utf8.decode(request.read());
    final jsonData = json.decode(body);
    final token = jsonData['token'];
    final email = jsonData['email'];
    final answer = jsonData['answer'];

    // Faça o processamento necessário com os dados recebidos
    // ...

    // Retorna uma resposta
    return shelf.Response.ok('Requisição POST recebida');
  }

  // Retorna uma resposta padrão para outras requisições
  return shelf.Response.notFound('Recurso não encontrado');
}

Neste exemplo, estamos criando um servidor Shelf local que escuta as requisições na porta 8080. Quando uma requisição POST é feita para o servidor, extraímos o objeto JSON do corpo da requisição, acessamos suas propriedades (token, email e answer) e realizamos o processamento necessário com esses dados. Por fim, retornamos uma resposta indicando que a requisição POST foi recebida.

Lembre-se de adicionar as dependências necessárias no arquivo pubspec.yaml do seu projeto:

dependencies:
  shelf: ^1.4.1
  shelf_proxy: ^1.0.4
  shelf_io: ^1.1.4

Certifique-se de importar as bibliotecas corretamente:

import 'dart:convert';
import 'package:shelf/shelf.dart' as shelf;
import 'package:shelf/shelf_io.dart' as shelf_io;
import 'package:shelf_proxy/shelf_proxy.dart';

Esse é um exemplo básico, e você pode personalizá-lo de acordo com as suas necessidades. Lembre-se também de ajustar o URL e o processamento dos dados para o seu caso específico.

Aqui está um exemplo completo de como fazer uma requisição POST usando o pacote Shelf em Flutter:

  1. Primeiro, você precisará adicionar as dependências corretas ao seu arquivo pubspec.yaml. Certifique-se de ter as seguintes dependências:
dependencies:
  shelf: ^1.4.1
  http_parser: ^4.0.2
  1. Em seguida, você pode criar um arquivo main.dart e adicionar o seguinte código:
import 'dart:convert';
import 'package:shelf/shelf.dart';
import 'package:shelf/shelf_io.dart' as shelf_io;

void main() async {
  var server = await shelf_io.serve(handleRequest, 'localhost', 8080);

  server.autoCompress = true;

  print('Servindo em http://${server.address.host}:${server.port}');
}

Response handleRequest(Request request) {
  if (request.method == 'POST') {
    // Decodifique o corpo da solicitação JSON
    return request.readAsString().then((body) {
      var requestBody = jsonDecode(body);

      // Acesse os dados da solicitação POST
      var username = requestBody['username'];
      var password = requestBody['password'];

      // Faça o processamento necessário com os dados
      // ...

      // Retorne uma resposta de sucesso
      return Response.ok('Requisição POST recebida. Username: $username, Password: $password');
    });
  } else {
    // Retorne uma resposta de método não permitido para outras solicitações
    return Response(405, body: 'Método não permitido');
  }
}

Este exemplo cria um servidor Shelf que escuta na porta 8080 em localhost. Ele manipula solicitações POST e retorna uma resposta com os dados recebidos.

Certifique-se de substituir a lógica de processamento de dados e a resposta com o que você precisa para o seu caso específico.