json_to_model icon indicating copy to clipboard operation
json_to_model copied to clipboard

List<int> becomes List<String> in toJson() method

Open jeecrypt opened this issue 2 years ago • 0 comments

List becomes List<String> in toJson() method

library version: 3.2.4

My meal_day.json file:

{ "id": 1, "day": 1, "recipes": [0] }

Model after generate (flutter packages pub run json_to_model):

import 'package:quiver/core.dart';

import 'index.dart';

@immutable
class MealDay {

  const MealDay({
    required this.id,
    required this.day,
    required this.recipes,
  });

  final int id;
  final int day;
  final List<int> recipes;

  factory MealDay.fromJson(Map<String,dynamic> json) => MealDay(
    id: json['id'] as int,
    day: json['day'] as int,
    recipes: (json['recipes'] as List? ?? []).map((e) => e as int).toList()
  );
  
  Map<String, dynamic> toJson() => {
    'id': id,
    'day': day,
    'recipes': recipes.map((e) => e.toString()).toList() // this toString !!!!!!!!!!!!!!
  };

  MealDay clone() => MealDay(
    id: id,
    day: day,
    recipes: recipes.toList()
  );


  MealDay copyWith({
    int? id,
    int? day,
    List<int>? recipes
  }) => MealDay(
    id: id ?? this.id,
    day: day ?? this.day,
    recipes: recipes ?? this.recipes,
  );

  @override
  bool operator ==(Object other) => identical(this, other)
    || other is MealDay && id == other.id && day == other.day && recipes == other.recipes;

  @override
  int get hashCode => id.hashCode ^ day.hashCode ^ recipes.hashCode;
}

Problen in to metod toJson() !

To fix i replace from 'recipes': recipes.map((e) => e.toString()).toList()

to 'recipes': recipes.map((e) => e).toList()

Upd: In source code 'dart_declaration.dart' replace this:

String toJsonBody(String className) {
    return checkNestedTypes(type!, (String cleanedType, bool isList, bool isListInList, bool isModel) {
      String conversion;

      if (isListInList) {
        conversion = '$name$isNullableString.map((e) => e.map((e) => e.toJson()).toList()).toList()';
      } else if (isList) {
        if (isModel) {
          conversion = '$name$isNullableString.map((e) => e.toJson()).toList()';
        } else {
          conversion = '$name$isNullableString.map((e) => e.toString()).toList()';
        }
      } else if (isModel) {
        conversion = '$name$isNullableString.toJson()';
      } else if (isDatetime && !isTimeStamp) {
        conversion = '$name$isNullableString.toIso8601String()';
      } else if (isTimeStamp) {
        conversion = '$name$isNullableString.millisecondsSinceEpoch';
      } else {
        conversion = name ?? '';
      }

      return "'$originalName': $conversion";
    });
  }

to this:

String toJsonBody(String className) {
    return checkNestedTypes(type!, (String cleanedType, bool isList, bool isListInList, bool isModel) {
      String conversion;

      if (isListInList) {
        conversion = '$name$isNullableString.map((e) => e.map((e) => e.toJson()).toList()).toList()';
      } else if (isList) {
        if (isModel) {
          conversion = '$name$isNullableString.map((e) => e.toJson()).toList()';
        } else {
          conversion = '$name$isNullableString.map((e) => e).toList()';
        }
      } else if (isModel) {
        conversion = '$name$isNullableString.toJson()';
      } else if (isDatetime && !isTimeStamp) {
        conversion = '$name$isNullableString.toIso8601String()';
      } else if (isTimeStamp) {
        conversion = '$name$isNullableString.millisecondsSinceEpoch';
      } else {
        conversion = name ?? '';
      }

      return "'$originalName': $conversion";
    });
  }

jeecrypt avatar Jan 03 '23 08:01 jeecrypt