Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Unhandled Exception: type 'double' is not a subtype of type 'String' in type cast

Galera, estou com um problema no momento em que eu salvo uma nova transação. Estou utilizando o projeto web-api utilizado em aula.

Saída do Json antes do envio do http

I/flutter ( 8946): {value: 7777.0, contact: {name: Leticia, accountNumber: 2222}}

Erro:

E/flutter ( 8946): [ERROR:flutter/lib/ui/ui_dart_state.cc(186)] Unhandled Exception: type 'double' is not a subtype of type 'String' in type cast
E/flutter ( 8946): #0      CastMap.forEach.<anonymous closure> (dart:_internal/cast.dart:288:25)
E/flutter ( 8946): #1      _LinkedHashMapMixin.forEach (dart:collection-patch/compact_hash.dart:397:8)
E/flutter ( 8946): #2      CastMap.forEach (dart:_internal/cast.dart:287:13)
E/flutter ( 8946): #3      mapToQuery (package:http/src/utils.dart:17:7)
E/flutter ( 8946): #4      Request.bodyFields= (package:http/src/request.dart:137:12)
E/flutter ( 8946): #5      HttpClientWithInterceptor._sendUnstreamed (package:http_interceptor/http_client_with_interceptor.dart:175:17)
E/flutter ( 8946): #6      HttpClientWithInterceptor.post (package:http_interceptor/http_client_with_interceptor.dart:101:7)
E/flutter ( 8946): #7      TransactionService.save (package:bytebank/service/webclient/transaction_service.dart:27:10)
E/flutter ( 8946): #8      _TransactionFormState.build.<anonymous closure> (package:bytebank/screens/transaction_form.dart:63:42)
E/flutter ( 8946): #9      _InkResponseState._handleTap (package:flutter/src/material/ink_well.dart:991:20)
E/flutter ( 8946): #10     GestureRecognizer.invokeCallback (package:flutter/src/gestures/recognizer.dart:182:24)
E/flutter ( 8946): #11     TapGestureRecognizer.handleTapUp (package:flutter/src/gestures/tap.dart:607:11)
E/flutter ( 8946): #12     BaseTapGestureRecognizer._checkUp (package:flutter/src/gestures/tap.dart:296:5)
E/flutter ( 8946): #13     BaseTapGestureRecognizer.handlePrimaryPointer (package:flutter/src/gestures/tap.dart:230:7)
E/flutter ( 8946): #14     PrimaryPointerGestureRecognizer.handleEvent (package:flutter/src/gestures/recognizer.dart:475:9)
E/flutter ( 8946): #15     PointerRouter._dispatch (package:flutter/src/gestures/pointer_router.dart:93:12)
E/flutter ( 8946): #16     PointerRouter._dispatchEventToRoutes.<anonymous closure> (package:flutter/src/gestures/pointer_router.dart:138:9)
E/flutter ( 8946): #17     _LinkedHashMapMixin.forEach (dart:collection-patch/compact_hash.dart:397:8)
E/flutter ( 8946): #18     PointerRouter._dispatchEventToRoutes (package:flutter/src/gestures/pointer_router.dart:136:18)
E/flutter ( 8946): #19     PointerRouter.route (package:flutter/src/gestures/pointer_router.dart:122:7)
E/flutter ( 8946): #20     GestureBinding.handleEvent (package:flutter/src/gestures/binding.dart:381:19)
E/flutter ( 8946): #21     GestureBinding.dispatchEvent (package:flutter/src/gestures/binding.dart:361:22)
E/flutter ( 8946): #22     RendererBinding.dispatchEvent (package:flutter/src/rendering/binding.dart:278:11)
E/flutter ( 8946): #23     GestureBinding._handlePointerEventImmediately (package:flutter/src/gestures/binding.dart:316:7)
E/flutter ( 8946): #24     GestureBinding.handlePointerEvent (package:flutter/src/gestures/binding.dart:280:5)
E/flutter ( 8946): #25     GestureBinding._flushPointerEventQueue (package:flutter/src/gestures/binding.dart:238:7)
E/flutter ( 8946): #26     GestureBinding._handlePointerDataPacket (package:flutter/src/gestures/binding.dart:221:7)
E/flutter ( 8946): #27     _rootRunUnary (dart:async/zone.dart:1370:13)
E/flutter ( 8946): #28     _CustomZone.runUnary (dart:async/zone.dart:1265:19)
E/flutter ( 8946): #29     _CustomZone.runUnaryGuarded (dart:async/zone.dart:1170:7)
E/flutter ( 8946): #30     _invoke1 (dart:ui/hooks.dart:180:10)
E/flutter ( 8946): #31     PlatformDispatcher._dispatchPointerDataPacket (dart:ui/platform_dispatcher.dart:276:7)
E/flutter ( 8946): #32     _dispatchPointerDataPacket (dart:ui/hooks.dart:96:31)

TransationService:

  Future<Transaction> save(Transaction transaction) async {
    print(transaction.toJson());
    final Response response = await client
        .post(Uri.http(baseUrl, "/transactions"), body: transaction.toJson());
    return Transaction.fromJson(jsonDecode(response.body));
  }

Transaction:

  Map<String, dynamic> toJson() =>
      {
        'value': value,
        'contact': contact.toJson(),
      };

Contact:

  Map<String, dynamic> toJson() =>
      {
        'name': name,
        'accountNumber': accountNumber,
      };
1 resposta
solução!

Problema resolvido, no método save() faltou o jsonEncode()...

Método com erro:

  Future<Transaction> save(Transaction transaction) async {
    print(transaction.toJson());
    final Response response = await client
        .post(Uri.http(baseUrl, "/transactions"), body: transaction.toJson());
    return Transaction.fromJson(jsonDecode(response.body));
  }

Método atualizado:

  Future<Transaction> save(Transaction transaction) async {
    final Response response = await client
        .post(Uri.http(baseUrl, "/transactions"), body: jsonEncode(transaction.toJson()));
    return Transaction.fromJson(jsonDecode(response.body));
  }

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software