_TypeError (Typ 'List <dynamic>' ist kein Subtyp vom Typ 'Map <String, dynamic>

Nov 13 2020

Benötigen Sie Ihre Hilfe bei der Behebung dieses Fehlers in Flutter ... auch, wie Sie die Instanz dieses Rückrufs auf anderen Bildschirmen verwenden können?

Dies ist mein message.json-Datenmodell

[
    {
        "title": "Title 1",
        "body": "Lorem ipsum dolor sit amet. "
    },
    {
        "title": "Title 1",
        "body": "Lorem ipsum dolor sit amet. "
    },
]

Mein message_model.dart

class MessagesList {
  final List<Message> messages;

  MessagesList(this.messages);

  factory MessagesList.fromJson(List<dynamic> parsedJson) {
    List<Message> messages = List<Message>();
    messages = parsedJson.map((e) => Message.fromJson(e)).toList();

    return MessagesList(messages);
  }
}

class Message {
  final String title;
  final String body;

  Message(this.title, this.body);

  factory Message.fromJson(Map<String, dynamic> json) {
    return Message(
      json['title'].toString(),
      json['body'].toString(),
    );
  }
}

Dies ist meine message_services.dart

_TypeError (Typ 'List' ist kein Subtyp vom Typ 'Map <String, dynamic>') in der Funktion loadMessage (Zeile 3 - fromJson-Methode). Warum?

Future<String> _loadMessageAsset() async {
  return await rootBundle.loadString("./data/message.json");
}

Future loadMessage() async {
  String jsonMessage = await _loadMessageAsset();
  final jsonResponse = jsonDecode(jsonMessage);
  Message message = Message.fromJson(jsonResponse);

  print("Message -- " + message.title);

}

Antworten

hasankaraman Nov 13 2020 at 21:17

messagejson gibt das JSON-Array nicht json-Objekt zurück, sodass List not Map ist.

 Future loadMessage() async {
   String jsonMessage = await _loadMessageAsset();
  Iterable jsonResponse = json.decode(jsonMessage);
   List<Message > Message = List<Message >.from(jsonResponse ).map((Map model)=> 
   Message .fromJson(model)).toList();
  print("Message -- " + message[0].title);

}
hasankaraman Nov 17 2020 at 16:17

Die Methode zum Drehen der Liste im Modell ist falsch. Kannst du das korrigieren? Sie werden verstehen, wenn Sie genau hinschauen.

  MessagesList  MessagesList FromJson(String str) => MessagesList 
  .fromJson(json.decode(str));

  String MessagesList ToJson(MessagesList  data) => json.encode(data.toJson());

 class MessagesList  {

  List<Message> flyForData;


   MessagesList ({

     this.messages,

      });
      ////////////this wrong
  factory MessagesList .fromJson(Map<String, dynamic> json) => MessagesList (
  
       messages: List<Message>.from(
          json["messages"].map((x) => Message.fromJson(x))),
    
       ); ////////////this wrong

   Map<String, dynamic> toJson() => {
 
       "messages": List<dynamic>.from(messages.map((x) => x.toJson())),
  
     };
  }

 class Message {
   final String title;
   final String body;
  Message({
   this.title, this.body
   });

  factory Message.fromJson(Map<String, dynamic> json) => Message(
       json['title'].toString(),
     json['body'].toString(),
     );

    Map<String, dynamic> toJson() => {
       "title": title,
       "body": body,
     };
  }