0
votes

I am new to DART / FLUTER and still have a lot of difficulties. I have a registration function and I need to return 2 attributes that are within a Json MAP. Constructs the function below but returns error

[ERROR: flutter / lib / ui / ui_dart_state.cc (157)] Unhandled Exception: type _InternalLinkedHashMap ' is not a subtype of type List

Can you help me?

About my code:

    saveClient(Cliente cliente) async {
      final Map<String, dynamic> clienteMap = {
        "nome": cliente.nome,
        "email": cliente.email,
        "senha": cliente.senha,
        "celular": cliente.celular,
      };

      final String clientJson = jsonEncode(clienteMap);
      client.post(baseUrl + '/usuario',
          headers: {'Content-type': 'application/json', 'password': 'admin'},
          body: clientJson);


      final Response response = await client.get(baseUrl + '/usuario/id');
      final List<dynamic> decodedJson = jsonDecode(response.body);
      final List<ClienteDto> dataUser = List();
      for (Map<String, dynamic> clienteJson in decodedJson) {
        final ClienteDto cliente = ClienteDto(
          clienteJson['id'],
          clienteJson['nome'],
        );
        dataUser.add(cliente);
        print(dataUser);
      }
      return dataUser;
    }
2
At which line are you getting this error? It's hard to give an answer without more details.Ben Konyi
This line: final List<dynamic> decodedJson = jsonDecode(response.body);Hudson_Nunes

2 Answers

0
votes

You're trying to assign your decoded JSON response, which is Map, to a List which isn't a valid assignment. You should try printing the result of jsonDecode(response.body) to figure out where the actual portion of the result you care about is within the response.

-1
votes

This is my all code of class WebClient:

import 'dart:async';
import 'dart:convert';
import 'package:http/http.dart';
import 'package:http_interceptor/http_interceptor.dart';
import 'package:owlwee/Models/Cartao.dart';
import 'package:owlwee/Models/Cliente.dart';
import 'package:owlwee/Models/ClienteDto.dart';

final Client client =
    HttpClientWithInterceptor.build(interceptors: [LoggingInterceptor()]);

const String baseUrl = 'http://xxxxxxxxxxxxxx:8080'; // LEROMA
const String baseUrlCheckIn = 'http://xxxxxxxxxxxxx:8081'; // LEROMA


class LoggingInterceptor implements InterceptorContract {
  @override
  Future<RequestData> interceptRequest({RequestData data}) async {
    print('Request');
    print('Headers: ${data.headers}');
    print('body: ${data.body}');
    return data;
  }

  @override
  Future<ResponseData> interceptResponse({ResponseData data}) async {
    print('Status ${data.statusCode}');
    print('Headers: ${data.headers}');
    print('body: ${data.body}');
    return data;
  }
}

saveClient(Cliente cliente) async {
  final Map<String, dynamic> clienteMap = {
    "nome": cliente.nome,
    "email": cliente.email,
    "senha": cliente.senha,
    "celular": cliente.celular,
  };

  final String clientJson = jsonEncode(clienteMap);
  client.post(baseUrl + '/usuario',
      headers: {'Content-type': 'application/json', 'password': 'admin'},
      body: clientJson);


  final Response response = await client.get(baseUrl + '/usuario/id');
  final List<dynamic> decodedJson = jsonDecode(response.body);
  final List<ClienteDto> dataUser = List();
  for (Map<String, dynamic> clienteJson in decodedJson) {
    final ClienteDto cliente = ClienteDto(
      clienteJson['id'],
      clienteJson['nome'],
    );
    dataUser.add(cliente);
    print(dataUser);
  }
  return dataUser;
}

And this is answer of console:

√ Built build\app\outputs\apk\debug\app-debug.apk.
Installing build\app\outputs\apk\app.apk...
Syncing files to device Android SDK built for x86...
I/flutter (15631): Request
I/flutter (15631): Headers: {Content-type: application/json; charset=utf-8, password: admin}
I/flutter (15631): body: {"nome":"Hudson","email":"[email protected]","senha":"123456","celular":21987987987}
I/flutter (15631): Request
I/flutter (15631): Headers: {}
I/flutter (15631): body: 
I/flutter (15631): Status 400
I/flutter (15631): Headers: {connection: close, content-type: application/json, date: Wed, 05 Feb 2020 00:38:37 GMT, transfer-encoding: chunked}
I/flutter (15631): body: {"timestamp":"2020-02-05T00:38:37.040+0000","status":400,"error":"Bad Request","message":"Failed to convert value of type 'java.lang.String' to required type 'int'; nested exception is java.lang.NumberFormatException: For input string: \"id\"","trace":"org.springframework.web.method.annotation.MethodArgumentTypeMismatchException: Failed to convert value of type 'java.lang.String' to required type 'int'; nested exception is java.lang.NumberFormatException: For input string: \"id\"\r\n\tat org.springframework.web.method.annotation.AbstractNamedValueMethodArgumentResolver.resolveArgument(AbstractNamedValueMethodArgumentResolver.java:133)\r\n\tat org.springframework.web.method.support.HandlerMethodArgumentResolverComposite.resolveArgument(HandlerMethodArgumentResolverComposite.java:121)\r\n\tat org.springframework.web.method.support.InvocableHandlerMethod.getMethodArgumentValues(InvocableHandlerMethod.java:167)\r\n\tat org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(Invocable
E/flutter (15631): [ERROR:flutter/lib/ui/ui_dart_state.cc(157)] Unhandled Exception: type '_InternalLinkedHashMap<String, dynamic>' is not a subtype of type 'List<dynamic>'
E/flutter (15631): #0      saveClient (package:owlwee/http/webclient.dart:83:23)
E/flutter (15631): <asynchronous suspension>
E/flutter (15631): #1      _CadastroState.build.<anonymous closure> (package:owlwee/Views/Cadastro.dart:192:25)
E/flutter (15631): #2      _InkResponseState._handleTap (package:flutter/src/material/ink_well.dart:706:14)
E/flutter (15631): #3      _InkResponseState.build.<anonymous closure> (package:flutter/src/material/ink_well.dart:789:36)
E/flutter (15631): #4      GestureRecognizer.invokeCallback (package:flutter/src/gestures/recognizer.dart:182:24)
E/flutter (15631): #5      TapGestureRecognizer.handleTapUp (package:flutter/src/gestures/tap.dart:486:11)
E/flutter (15631): #6      BaseTapGestureRecognizer._checkUp (package:flutter/src/gestures/tap.dart:264:5)
E/flutter (15631): #7      BaseTapGestureRecognizer.acceptGesture (package:flutter/src/gestures/tap.dart:236:7)
E/flutter (15631): #8      GestureArenaManager.sweep (package:flutter/src/gestures/arena.dart:156:27)
E/flutter (15631): #9      GestureBinding.handleEvent (package:flutter/src/gestures/binding.dart:222:20)
E/flutter (15631): #10     GestureBinding.dispatchEvent (package:flutter/src/gestures/binding.dart:198:22)
E/flutter (15631): #11     GestureBinding._handlePointerEvent (package:flutter/src/gestures/binding.dart:156:7)
E/flutter (15631): #12     GestureBinding._flushPointerEventQueue (package:flutter/src/gestures/binding.dart:102:7)
E/flutter (15631): #13     GestureBinding._handlePointerDataPacket (package:flutter/src/gestures/binding.dart:86:7)
E/flutter (15631): #14     _rootRunUnary (dart:async/zone.dart:1138:13)
E/flutter (15631): #15     _CustomZone.runUnary (dart:async/zone.dart:1031:19)
E/flutter (15631): #16     _CustomZone.runUnaryGuarded (dart:async/zone.dart:933:7)
E/flutter (15631): #17     _invoke1 (dart:ui/hooks.dart:273:10)
E/flutter (15631): #18     _dispatchPointerDataPacket (dart:ui/hooks.dart:182:5)
E/flutter (15631): 
I/flutter (15631): Status 201
I/flutter (15631): Headers: {content-type: application/json, location: http://192.168.1.9:8080/usuario/9, date: Wed, 05 Feb 2020 00:38:37 GMT, transfer-encoding: chunked}
I/flutter (15631): body: {"id":9,"nome":"Hudson"}

Is that what you asked?