dart Error:List< dynamic>不是Map&lt;String,dynamic&gt;类型的子类型当插入json到框配置单元时

nkoocmlb  于 2024-01-04  发布在  其他
关注(0)|答案(1)|浏览(187)

我目前正在构建一个应用程序。我已经收到了来自我调用的API的响应。只是当我想将响应保存到Hive框中时,出现了如下错误

我为UnitModel(unit_model.dart)创建了一个模型类:

  1. // To parse this JSON data, do
  2. //
  3. // final unitModel = unitModelFromJson(jsonString);
  4. import 'dart:convert';
  5. UnitModel unitModelFromJson(String str) => UnitModel.fromJson(json.decode(str));
  6. String unitModelToJson(UnitModel data) => json.encode(data.toJson());
  7. class UnitModel {
  8. bool status;
  9. String msg;
  10. List<UnitListDataModel> data;
  11. UnitModel({
  12. required this.status,
  13. required this.msg,
  14. required this.data,
  15. });
  16. factory UnitModel.fromJson(Map<String, dynamic> json) => UnitModel(
  17. status: json["status"],
  18. msg: json["msg"],
  19. data: List<UnitListDataModel>.from(json["data"].map((x) => UnitListDataModel.fromJson(x))),
  20. );
  21. Map<String, dynamic> toJson() => {
  22. "status": status,
  23. "msg": msg,
  24. "data": List<dynamic>.from(data.map((x) => x.toJson())),
  25. };
  26. }
  27. class UnitListDataModel {
  28. int? id;
  29. String? kodeUnit;
  30. double? endMeter;
  31. UnitListDataModel({
  32. this.id,
  33. this.kodeUnit,
  34. this.endMeter,
  35. });
  36. factory UnitListDataModel.fromJson(Map<String, dynamic> json) => UnitListDataModel(
  37. id: json["id"],
  38. kodeUnit: json["kode_unit"],
  39. endMeter: json["end_meter"],
  40. );
  41. Map<String, dynamic> toJson() => {
  42. "id": id,
  43. "kode_unit": kodeUnit,
  44. "end_meter": endMeter,
  45. };
  46. }

字符串
这是meter_service.dart读取json

  1. class MeterServices {
  2. final _api = DioHelper().getDio();
  3. final _prefs = Prefs();
  4. Future<void> _addItem(List<Map<String, dynamic>> newItems) async {
  5. for (var newItem in newItems) {
  6. await _prefs.item.add(newItem);
  7. }
  8. }
  9. Future<UnitListDataModel> getListUnit({String? kode}) async {
  10. final res = await _api.post('/unit/get');
  11. if (_prefs.item.isEmpty) {
  12. // print("______________________");
  13. // print(res.data);
  14. // print("______________________");
  15. _addItem(res.data['data']);
  16. }
  17. return UnitListDataModel.fromJson(res.data);
  18. }
  19. }


我如何克服这个错误,使数据可以存储在Hive盒,我提供.谢谢

egmofgnx

egmofgnx1#

您可以通过将其编码为String来保存整个JsonResponse。当从HIVE中检索时,您可以使用jsonEncodejsonDecode将其解码回Map。

  1. void main() {
  2. Map<String, dynamic> json = {
  3. "status": true,
  4. "msg": "Data Found",
  5. "data": [
  6. {
  7. "id": 1,
  8. "kode_unit": "qwerty",
  9. "end_meter": 12
  10. },
  11. {
  12. "id": 2,
  13. "kode_unit": "abcd",
  14. "end_meter": 3
  15. },
  16. {
  17. "id": 3,
  18. "kode_unit": "asdfg",
  19. "end_meter": 5
  20. }
  21. ]
  22. };
  23. String jsonEncoded = jsonEncode(json);//save this in HIVE as String
  24. print(jsonEncoded);
  25. Map<String, dynamic> decodedMap = jsonDecode(jsonEncoded);// Decode it to Map when retrieving from HIVE
  26. print(decodedMap);
  27. List list = decodedMap['data'];
  28. List<UnitListDataModel> model = list.map((e) => UnitListDataModel.fromJson(e)).toList();
  29. for(var unit in model){
  30. print(unit.kodeUnit);
  31. }
  32. }

字符串

展开查看全部

相关问题