1
resposta

Estou tendo o erro SyntaxError: Unexpected token 'c',

Esse é o terminal do server Insira aqui a descrição dessa imagem para ajudar na acessibilidade

Não está registrando no db.json

Estou usando o Android Studio, isso muda algo?

vou enviar meus codigos

main.dart:

import 'package:flutter/material.dart';
import 'package:flutter_webapi_first_course/services/journal_service.dart';
import 'package:google_fonts/google_fonts.dart';
import 'screens/home_screen/home_screen.dart';

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

  JournalService service = JournalService();
  service.register("Salve");
  service.get();
}

class MyApp extends StatelessWidget {
  const MyApp({Key? key}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Simple Journal',
      debugShowCheckedModeBanner: false,
      theme: ThemeData(
        primarySwatch: Colors.grey,
        appBarTheme: const AppBarTheme(
          elevation: 0,
          backgroundColor: Colors.black,
          titleTextStyle: TextStyle(
            color: Colors.white,
          ),
        ),
        textTheme: GoogleFonts.bitterTextTheme()
      ),
      darkTheme: ThemeData.dark(),
      themeMode: ThemeMode.light,
      initialRoute: "home",
      routes: {
        "home": (context) => const HomeScreen(),
      },
    );
  }
}

journal_service.dart

import 'package:flutter_webapi_first_course/services/http_interceptors.dart';
import 'package:http/http.dart' as http;
import 'package:http_interceptor/http/intercepted_client.dart';

class JournalService {
  static const String url = "http://192.168.15.51:3000/";
  static const String resource = "learnhttp/";

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

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

  void register(String content) {
    client.post(Uri.parse(getURI()), body: {'content': content});
  }

  void get() async {
    http.Response response = await client.get(Uri.parse(getURI()));
    print(response.body);
  }
}

http_interceptors.dart

import 'package:http_interceptor/http_interceptor.dart';

class LoggingInterceptor implements InterceptorContract {
  @override
  Future<RequestData> interceptRequest({required RequestData data}) async {
    print(data.toString());
    return data;
  }

  @override
  Future<ResponseData> interceptResponse({required ResponseData data}) async {
    print(data.toString());
    return data;
  }

}

db.json

{
  "learnhttp": {

  }
}

Eu estou re assinstindo a aula para ver se pulei algo mas não encontrei

1 resposta

Olá, João!

O erro que você está enfrentando "SyntaxError: Unexpected token 'c'" indica que há um problema com o formato do JSON que está sendo enviado ao servidor. A mensagem de erro sugere que o servidor está recebendo a string "content=Salve" em vez de um objeto JSON válido.

No seu código, na função register dentro do arquivo journal_service.dart, você está enviando o corpo da requisição como um mapa Dart diretamente:

void register(String content) {
  client.post(Uri.parse(getURI()), body: {'content': content});
}

O problema aqui é que o servidor espera receber um objeto JSON, mas o cliente HTTP está enviando os dados como um formulário codificado em URL por padrão, o que não é interpretado corretamente pelo servidor como JSON. Para corrigir isso, você precisa codificar o corpo da requisição como JSON.

Você pode fazer isso utilizando o pacote dart:convert para codificar o mapa em uma string JSON. Aqui está como você pode modificar a função register para enviar os dados corretamente:

import 'dart:convert';

// ...

void register(String content) {
  client.post(
    Uri.parse(getURI()),
    headers: {'Content-Type': 'application/json'},
    body: json.encode({'content': content}),
  );
}

Note que adicionei um cabeçalho Content-Type para indicar ao servidor que estamos enviando um objeto JSON e usei a função json.encode para converter o mapa em uma string JSON.

Tente fazer essa alteração e veja se resolve o problema. Se o erro persistir, verifique também se há algo mais no código que possa estar alterando o formato do corpo da requisição antes de ser enviado.

Espero ter ajudado. Qualquer coisa manda aqui. Bons estudos!