Solucionado (ver solução)
Solucionado
(ver solução)
5
respostas

Erro The argument type 'dynamic' can't be assigned to the parameter type 'Map<String, dynamic>'

Opa galera, no meu código ta dando esse problema The argument type 'dynamic' can't be assigned to the parameter type 'Map<String, dynamic>'

acho que a versão atual do Dart que gera esse problema, e antigamento esse problema não acontecia em versões anteriores, alguém sabe o que pode ser?

import 'model.dart';

class Transaction {
  final double value;
  final Contact contact;

  Transaction({
    required this.value,
    required this.contact,
  });

  @override
  String toString() {
    return 'Transaction{value: $value, contact: $contact}';
  }

  Transaction.fromJson(Map<String, dynamic> json)
      :
        value = json['value'] as double,
        contact = Contact.fromJson(json['contact']); // aqui acontece o erro

  Map<String, dynamic> toJson() {
    return {
      "value": this.value,
      "contact": this.contact.toJson(),
    };
  }
}
5 respostas

Eu não sei como é seu código na parte do Contact nem a estrutura do seu json. Mas pelo que eu entendi, a função Contact.fromJson deveria receber um Map<String, dynamic> e vc está passando apenas dynamic. Você não deveria estar passando todo o json, ao invés de apenas o valor 'contact'?

solução!

Opa Rafael tudo tranquilo?, voce acertou na classe do Contact eu preciso receber um Map<String, dynamic> só que o json desse arquivo do Transaction é um json que tem um objeto dentro de outro objeto, deveria realmente funcionar, principalmente por que o código está como o do instrutor, na martelada consegui resolver a situação com um Cast e um Map não tipado, realmente acredito que é versão de flutter, atualmente ele dá esses alertas porém quando foram gravadas as aulas o flutter não alertava e aceitava sem precisar do Cast

Entendi. Que bom que resolveu.

Boa noite, Newton! Estou com o mesmo problema porém não sei implementar o Cast e o Map não tipado; Você poderia compartilhar sua solução?

Fala Bruno tudo bom? para resolver essa situação voce vai adicionar o operador as depois o tipo que quer que a informação represente por exemplo doble, ou pode ser String ou int ou até mesmo o Map<String, dynamic> vai depender de qual tipo o parâmetro está esperando, segue a resolução

Transaction.fromJson(Map<String, dynamic> json)
      :
        value = json['value'] as double,
        contact = Contact.fromJson(json['contact'] as Map<String, dynamic>);

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