Home > OS >  flutter _TypeError (type '(dynamic) => Categorys' is not a subtype of type '(Strin
flutter _TypeError (type '(dynamic) => Categorys' is not a subtype of type '(Strin

Time:01-29

**i am using getx pluign i am facing problem _TypeError (type '(dynamic) => Categorys' is not a subtype of type '(String, dynamic) => MapEntry<dynamic, dynamic>' of 'transform') **

my model

// To parse this JSON data, do
//
//     final categorys = categorysFromJson(jsonString);

import 'dart:convert';

import 'package:get/get_rx/src/rx_types/rx_types.dart';
// ignore: non_constant_identifier_names

// ignore: non_constant_identifier_names

// ignore: non_constant_identifier_names
List CategorysFromJson(dynamic str) =>
    List<Categorys>.from(json.decode(str).map((x) => Categorys.fromJson(x)));

// ignore: non_constant_identifier_names
String CategorysToJson(List<Categorys> data) =>
    json.encode(List<dynamic>.from(data.map((x) => x.toJson())));
var isFavorite = false.obs;

class Categorys {
  Categorys({
    required this.data,
  });

  List<Datum> data;

  factory Categorys.fromJson(Map<String, dynamic> json) => Categorys(
        data: List<Datum>.from(json["data"].map((x) => Datum.fromJson(x))),
      );

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

class Datum {
  Datum({
    required this.id,
    required this.title,
    required this.details,
    required this.createdAt,
    required this.updatedAt,
    required this.image,
    required this.media,
  });

  int id;
  String title;
  String details;
  DateTime createdAt;
  DateTime updatedAt;
  List<Image> image;
  List<Image> media;

  factory Datum.fromJson(Map<String, dynamic> json) => Datum(
        id: json["id"],
        title: json["title"],
        details: json["details"],
        createdAt: DateTime.parse(json["created_at"]),
        updatedAt: DateTime.parse(json["updated_at"]),
        image: List<Image>.from(json["image"].map((x) => Image.fromJson(x))),
        media: List<Image>.from(json["media"].map((x) => Image.fromJson(x))),
      );

  Map<String, dynamic> toJson() => {
        "id": id,
        "title": title,
        "details": details,
        "created_at": createdAt.toIso8601String(),
        "updated_at": updatedAt.toIso8601String(),
        "image": List<dynamic>.from(image.map((x) => x.toJson())),
        "media": List<dynamic>.from(media.map((x) => x.toJson())),
      };
}

class Image {
  Image({
    required this.id,
    required this.modelType,
    required this.modelId,
    required this.uuid,
    required this.collectionName,
    required this.name,
    required this.fileName,
    required this.mimeType,
    required this.disk,
    required this.conversionsDisk,
    required this.size,
    required this.manipulations,
    required this.customProperties,
    required this.responsiveImages,
    required this.orderColumn,
    required this.createdAt,
    required this.updatedAt,
    required this.url,
    required this.thumbnail,
    required this.previewThumbnail,
  });

  int id;
  String modelType;
  int modelId;
  String uuid;
  String collectionName;
  String name;
  String fileName;
  String mimeType;
  String disk;
  String conversionsDisk;
  int size;
  List<dynamic> manipulations;
  CustomProperties customProperties;
  List<dynamic> responsiveImages;
  int orderColumn;
  DateTime createdAt;
  DateTime updatedAt;
  String url;
  String thumbnail;
  String previewThumbnail;

  factory Image.fromJson(Map<String, dynamic> json) => Image(
        id: json["id"],
        modelType: json["model_type"],
        modelId: json["model_id"],
        uuid: json["uuid"],
        collectionName: json["collection_name"],
        name: json["name"],
        fileName: json["file_name"],
        mimeType: json["mime_type"],
        disk: json["disk"],
        conversionsDisk: json["conversions_disk"],
        size: json["size"],
        manipulations: List<dynamic>.from(json["manipulations"].map((x) => x)),
        customProperties: CustomProperties.fromJson(json["custom_properties"]),
        responsiveImages:
            List<dynamic>.from(json["responsive_images"].map((x) => x)),
        orderColumn: json["order_column"],
        createdAt: DateTime.parse(json["created_at"]),
        updatedAt: DateTime.parse(json["updated_at"]),
        url: json["url"] == null ? null : json["url"],
        thumbnail: json["thumbnail"] == null ? null : json["thumbnail"],
        previewThumbnail: json["preview_thumbnail"] == null
            ? null
            : json["preview_thumbnail"],
      );

  Map<String, dynamic> toJson() => {
        "id": id,
        "model_type": modelType,
        "model_id": modelId,
        "uuid": uuid,
        "collection_name": collectionName,
        "name": name,
        "file_name": fileName,
        "mime_type": mimeType,
        "disk": disk,
        "conversions_disk": conversionsDisk,
        "size": size,
        "manipulations": List<dynamic>.from(manipulations.map((x) => x)),
        "custom_properties": customProperties.toJson(),
        "responsive_images": List<dynamic>.from(responsiveImages.map((x) => x)),
        "order_column": orderColumn,
        "created_at": createdAt.toIso8601String(),
        "updated_at": updatedAt.toIso8601String(),
        "url": url == null ? null : url,
        "thumbnail": thumbnail == null ? null : thumbnail,
        "preview_thumbnail": previewThumbnail == null ? null : previewThumbnail,
      };
}

class CustomProperties {
  CustomProperties({
    required this.generatedConversions,
  });

  GeneratedConversions generatedConversions;

  factory CustomProperties.fromJson(Map<String, dynamic> json) =>
      CustomProperties(
        generatedConversions:
            GeneratedConversions.fromJson(json["generated_conversions"]),
      );

  Map<String, dynamic> toJson() => {
        "generated_conversions": generatedConversions.toJson(),
      };
}

class GeneratedConversions {
  GeneratedConversions({
    required this.thumbnail,
    required this.previewThumbnail,
  });

  bool thumbnail;
  bool previewThumbnail;

  factory GeneratedConversions.fromJson(Map<String, dynamic> json) =>
      GeneratedConversions(
        thumbnail: json["thumbnail"],
        previewThumbnail: json["preview_thumbnail"],
      );

  Map<String, dynamic> toJson() => {
        "thumbnail": thumbnail,
        "preview_thumbnail": previewThumbnail,
      };
}

my services

class CategoryServices {
  static var client = http.Client();

  static Future<List?> fetchCategorys() async {
    var response = await client
        .get(Uri.parse('http://localhost/api/users/get_plancategory'));
    if (response.statusCode == 200) {
      var jsonString = response.body;
      print(jsonString);
      return CategorysFromJson(jsonString);
    } else {
      //show error message
      return null;
    }
  }
}

my controller

class CategoryController extends GetxController {
  var isLoading = true.obs;
  var categorysList = <Categorys>[].obs;

  @override
  void onInit() {
    fetchCategorys();
    super.onInit();
  }

  void fetchCategorys() async {
    try {
      isLoading(true);
      var categorys = await CategoryServices.fetchCategorys();

      if (categorys != null) {
        categorysList.value = categorys as List<Categorys>;
      }
    } finally {
      isLoading(false);
    }
  }
}

**api response

{
    "data": [
        {
            "id": 1,
            "title": "test",
            "details": "test details",
            "created_at": "2022-01-28 08:12:19",
            "updated_at": "2022-01-28 08:12:19",
            "image": [
                {
                    "id": 10,
                    "model_type": "App\\Models\\PalnCategory",
                    "model_id": 1,
                    "uuid": "d6623251-b0fc-404d-9071-530074e7d181",
                    "collection_name": "paln_category_image",
                    "name": "img1",
                    "file_name": "img1.png",
                    "mime_type": "image/png",
                    "disk": "public",
                    "conversions_disk": "public",
                    "size": 293049,
                    "manipulations": [],
                    "custom_properties": {
                        "generated_conversions": {
                            "thumbnail": true,
                            "preview_thumbnail": true
                        }
                    },
                    "responsive_images": [],
                    "order_column": 4,
                    "created_at": "2022-01-28T08:12:09.000000Z",
                    "updated_at": "2022-01-28T08:12:19.000000Z",
                    "url": "http://localhost/storage/10/img1.png",
                    "thumbnail": "http://localhost/storage/10/conversions/img1-thumbnail.jpg",
                    "preview_thumbnail": "http://localhost/storage/10/conversions/img1-preview_thumbnail.jpg"
                }
            ],
            "media": [
                {
                    "id": 10,
                    "model_type": "App\\Models\\PalnCategory",
                    "model_id": 1,
                    "uuid": "d6623251-b0fc-404d-9071-530074e7d181",
                    "collection_name": "paln_category_image",
                    "name": "img1",
                    "file_name": "img1.png",
                    "mime_type": "image/png",
                    "disk": "public",
                    "conversions_disk": "public",
                    "size": 293049,
                    "manipulations": [],
                    "custom_properties": {
                        "generated_conversions": {
                            "thumbnail": true,
                            "preview_thumbnail": true
                        }
                    },
                    "responsive_images": [],
                    "order_column": 4,
                    "created_at": "2022-01-28T08:12:09.000000Z",
                    "updated_at": "2022-01-28T08:12:19.000000Z"
                }
            ]
        },
        {
            "id": 2,
            "title": "test2",
            "details": "test2 details",
            "created_at": "2022-01-28 08:12:38",
            "updated_at": "2022-01-28 08:12:38",
            "image": [
                {
                    "id": 11,
                    "model_type": "App\\Models\\PalnCategory",
                    "model_id": 2,
                    "uuid": "7bb9e303-8b1c-4672-8ddb-981e2ab3c895",
                    "collection_name": "paln_category_image",
                    "name": "img2",
                    "file_name": "img2.png",
                    "mime_type": "image/png",
                    "disk": "public",
                    "conversions_disk": "public",
                    "size": 236448,
                    "manipulations": [],
                    "custom_properties": {
                        "generated_conversions": {
                            "thumbnail": true,
                            "preview_thumbnail": true
                        }
                    },
                    "responsive_images": [],
                    "order_column": 5,
                    "created_at": "2022-01-28T08:12:32.000000Z",
                    "updated_at": "2022-01-28T08:12:38.000000Z",
                    "url": "http://localhost/storage/11/img2.png",
                    "thumbnail": "http://localhost/storage/11/conversions/img2-thumbnail.jpg",
                    "preview_thumbnail": "http://localhost/storage/11/conversions/img2-preview_thumbnail.jpg"
                }
            ],
            "media": [
                {
                    "id": 11,
                    "model_type": "App\\Models\\PalnCategory",
                    "model_id": 2,
                    "uuid": "7bb9e303-8b1c-4672-8ddb-981e2ab3c895",
                    "collection_name": "paln_category_image",
                    "name": "img2",
                    "file_name": "img2.png",
                    "mime_type": "image/png",
                    "disk": "public",
                    "conversions_disk": "public",
                    "size": 236448,
                    "manipulations": [],
                    "custom_properties": {
                        "generated_conversions": {
                            "thumbnail": true,
                            "preview_thumbnail": true
                        }
                    },
                    "responsive_images": [],
                    "order_column": 5,
                    "created_at": "2022-01-28T08:12:32.000000Z",
                    "updated_at": "2022-01-28T08:12:38.000000Z"
                }
            ]
        }
    ]
}

** **i am using getx pluign i am facing problem _TypeError (type '(dynamic) => Categorys' is not a subtype of type '(String, dynamic) => MapEntry<dynamic, dynamic>' of 'transform')

List<Categorys>.from(json.decode(str).map((x) => Categorys.fromJson(x)));

this line show error **

CodePudding user response:

Check this question/answer:

tldr; Use a for-in generator instead of .map() as casting does not work for some reason uknown to me.

Replace

List<Categorys>.from(json.decode(str).map((x) => Categorys.fromJson(x)));

with

List<Categorys>[
  for (Object x in json.decode(str)) Categorys.fromJson(x),
];

Also may I suggest that you change Categorys to Categories :)

CodePudding user response:

Try this:

List.from(json.decode(str)).map((x) => Categorys.fromJson(Map.from(x)))).toList();
  •  Tags:  
  • Related