我正在尝试使用 parsedFromJson 和 getDataFromDB future 方法从数据库输出数据,但出现错误并且无法解决。我是一位经验丰富的开发人员,但对 Flutter 很陌生。我以前从未花这么多时间来解决其他技术堆栈中的任何问题
class House_Effects {
final String? ID;
final String? Title;
final DateTime? Date;
House_Effects({required this.ID, required this.Title, required this.Date });
factory House_Effects .fromJson(Map<String, dynamic> json) {
return House_Effects (
ID: json['ID'].toString(),
Title: json['Title'].toString(),
Date: json['Date']
);
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['ID'] = this.ID.toString();
data['Title'] = this.Title;
data['Date'] = this.Date;
return data;
}
}
List<House_Effects > parsedFromJson(String responseBody) {
List<dynamic> jsonData = jsonDecode(responseBody);
List<Map<String, dynamic>>? endParsed = [];
for (int idx = 0; idx < jsonData.length; idx++)
{
final parsed = (jsonDecode(responseBody)) as Map<String,dynamic>;
endParsed.add(parsed);
}
return endParsed.map<House_Effects >((json) =>
House_Effects.fromJson(json)).toList();
}
Future<List<House_Effects>> getDataFromDB() async {
List<House_Effects> listEffects = [];
const String bUrl = 'http://17627.9.9.1:4008';
final response = await http.get(Uri.parse('$bUrl/show'));
if (response.statusCode == 200) {
listEffects = await parsedFromJson(response.body);
} else {
throw Exception('Failed to getdata');
};
return listEffects;
}
}
---JSArray:List 类型不是 Map 类型的子类型
颤动飞镖
错误主要来自 final parsed = (jsonDecode(responseBody)) as Map
你需要使用演员表。
List<House_Effects> parsedFromJson(String responseBody) {
final parsed = json.decode(responseBody).cast<Map<String, dynamic>>();
return parsed
.map<House_Effects>((json) => House_Effects.fromJson(json))
.toList();
}