1
resposta

Erro ao receber JSON no localhost

Cheguei na parte do curso de testar a inserção de um journal no localhost com o post na função main:

void main() {
  runApp(const MyApp());

  JournalService journalService = JournalService();
  journalService.register(Journal.empty());
}

A função que realiza o post se encontra assim:

class JournalService {
  static const String url = "http://192.168.1.9:3000/";
  static const String resource = "journals/";

  http.Client client = InterceptedClient.build(
    interceptors: [LoggingInterceptor()],
  );

  String getUrl() {
    return "$url$resource";
  }

  Future<bool> register(Journal journal) async {
    String jsonJournal = json.encode(journal.toMap());

    http.Response response = await client.post(
        Uri.parse(getUrl()),
        headers: {'Content-type': "aplication/json"},
        body: jsonJournal
    );

    if (response.statusCode == 201) {
      return true;
    }
    return false;
  }

A função de mapear o journal se encontra da seguinte maneira:

class Journal {
  String id;
  String content;
  DateTime createdAt;
  DateTime updatedAt;

  Journal({
    required this.id,
    required this.content,
    required this.createdAt,
    required this.updatedAt,
  });

  Journal.empty()
      : id = const Uuid().v1(),
        content = "",
        createdAt = DateTime.now(),
        updatedAt = DateTime.now();

  Map<String, dynamic> toMap() {
    return <String, dynamic>{
      "id": id,
      "content": content,
      "created_at": createdAt.toString(),
      "updated_at": updatedAt.toString(),
    };
  }

Ao rodar o programa e fazer a requisição com o post recebo o seguinte log de request do Logger:

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

Nota-se que o body tem todas as informações corretas o que me faz acreditar que o código está correto principalmente a transformação do objeto Journal para mapa e consequentemente JSON.

Entretanto o log de response do Logger se encontra da seguinte forma:

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

E no arquivo db.json o input realizado foi realmente esse:

{
  "learnflutter": {},
  "journals": [
    {
      "id": 1
    }
  ]
}

Baixei o projeto finalizado desta etapa do curso e por ele consegui realizar um post após configurá-lo corretamente para meu ip, entretanto, mesmo conferindo o código com esse projeto não consegui encontrar o erro.

Aqui estão as dependências:

environment:
  sdk: ">=2.17.3 <3.0.0"

dependencies:
  flutter:
    sdk: flutter

  cupertino_icons: ^1.0.2
  uuid: ^3.0.6
  google_fonts: ^4.0.3
  http: ^0.13.5
  http_interceptor: ^1.0.2
  logger: ^1.1.0

dev_dependencies:
  flutter_test:
    sdk: flutter

  flutter_lints: ^2.0.0

flutter:

  uses-material-design: true

Alguém saberia me dizer o porquê de estar cadastrando na api "id": 1 e não o JSON do meu objeto? Agradeço desde já.

1 resposta

Olá Gabriel, sou estudante e vou tentar ajudar, acho que seria model de Journal obriga um id com require, tentou tirar? teste assim

Journal({
    this.id,
    required this.content,
    required this.createdAt,
    required this.updatedAt,
  });