Reputation: 105
I have this code from my other question (thanks to chunhunghan). I need to make a log in screen and im trying to validate user credentials against a response the server sends back to me but every time i try to run the code it gives me the "Unhandled Exception: InternalLinkedHashMap' is not a subtype of type 'List" error and im not sure how to fix it.
thats the model:
import 'dart:convert';
Payload payloadFromJson(String str) => Payload.fromJson(json.decode(str));
String payloadToJson(Payload data) => json.encode(data.toJson());
class Payload {
Payload({
this.version,
this.encoding,
this.subsonicResponse,
});
String version;
String encoding;
SubsonicResponse subsonicResponse;
factory Payload.fromJson(Map<String, dynamic> json) => Payload(
version: json["version"],
encoding: json["encoding"],
subsonicResponse: SubsonicResponse.fromJson(json["subsonic-response"]),
);
Map<String, dynamic> toJson() => {
"version": version,
"encoding": encoding,
"subsonic-response": subsonicResponse.toJson(),
};
}
class SubsonicResponse {
SubsonicResponse({
this.status,
this.version,
this.xmlns,
this.albumList,
});
String status;
String version;
String xmlns;
AlbumList albumList;
factory SubsonicResponse.fromJson(Map<String, dynamic> json) =>
SubsonicResponse(
status: json["status"],
version: json["version"],
albumList: AlbumList.fromJson(json["albumList"]),
);
Map<String, dynamic> toJson() => {
"status": status,
"version": version,
"albumList": albumList.toJson(),
};
}
class AlbumList {
AlbumList({
this.album,
});
List<AlbumsList> album;
factory AlbumList.fromJson(Map<String, dynamic> json) => AlbumList(
album: json["album"] == null ? null: List<AlbumsList>.from(json["album"].map((x) => AlbumsList.fromJson(x))),);
Map<String, dynamic> toJson() => {
"album": album == null ? null: List<dynamic>.from(album.map((x) => x.toJson())),
};
}
class AlbumsList {
AlbumsList({
this.id,
this.parent,
this.isDir,
this.title,
this.album,
this.artist,
this.genre,
this.coverArt,
this.playCount,
this.created,
this.year,
});
String id;
String parent;
String isDir;
String title;
String album;
String artist;
String genre;
String coverArt;
String playCount;
DateTime created;
String year;
factory AlbumsList.fromJson(Map<String, dynamic> json) => AlbumsList(
id: json["id"],
parent: json["parent"],
isDir: json["isDir"],
title: json["title"],
album: json["album"],
artist: json["artist"],
genre: json["genre"],
coverArt: json["coverArt"],
playCount: json["playCount"],
created: DateTime.parse(json["created"]),
year: json["year"] == null ? null : json["year"],
);
Map<String, dynamic> toJson() => {
"id": id,
"parent": parent,
"isDir": isDir,
"title": title,
"album": album,
"artist": artist,
"genre": genre,
"coverArt": coverArt,
"playCount": playCount,
"created": created.toIso8601String(),
"year": year == null ? null : year,
};
}
here is the request:
Future <Payload>fetchResponse() async{
final authresponse = await http.get(authURL);
if (authresponse.statusCode == 200){
final jsondata = jsonDecode(authresponse.body);
return payloadFromJson(jsondata);
}else
throw Exception("Unable to connect to server, try again");
}
it gives me the error on the return line. EDIT: i forgot to add the api response.
{
"subsonic-response": {
"status": "ok",
"version": "1.15.0"
}
}
this is the api response
Upvotes: 0
Views: 253
Reputation: 1140
change payloadFromJson
to
Payload payloadFromJson (Map<String, dynamic>str) => Payload.fromJson(str);
fetch value from json if the json contains the key
factory SubsonicResponse.fromJson(Map<String, dynamic> json) =>
SubsonicResponse(
status: json["status"],
version: json["version"],
albumList: json.containsKey("albumList")? AlbumList.fromJson(json["albumList"]):null,
);
Upvotes: 1