Jun
Jun

Reputation: 541

In Flutter, an object's fromJson method generated by freezed occured type cast error, DateTime -> String

I have used freezed library to manage my Remote DTO classes and Ui Models.

In this question case, my Object LifeDiagnosisResult DTO and Ui Model only have one difference - createdAt field.

When I put data, I used SharedPreference (because backend is not yet built) and put my List value by jsonEncode function.

When I get a response from SharedPreference (because backend is not yet built) , I used jsonDecode to get Map Object.

To achieve my final wish, List Object, I added createdAt field like this.

void _handleListResponseSuccess(List<String> response) {
    List<LifeDiagnosisResultUiModel>? uiModelList = response.map((e) {
      Map<String, dynamic> map = jsonDecode(e) as Map<String, dynamic>;

      map['createdAt'] = DateTime.now();

      return LifeDiagnosisResultUiModel.fromJson(map);
    }).toList();

    if (uiModelList.isNotEmpty) {
      setLifeDiagnosisResultUiModel(uiModelList[uiModelList.length - 1]);
    }

    _rxList(uiModelList);
  }

But, when I ran this code, type casting error was caused.

The error message is this.

error type 'DateTime' is not a subtype of type 'String' in type cast

And this is my Ui Model's createdAt field.

enter image description here

I think Map's createdAt could not find correct field in Ui Model.

But I have no idea why...

Could you tell me what is wrong?

Upvotes: 0

Views: 761

Answers (2)

MCB
MCB

Reputation: 876

I don't know if I get it right, but if you want to test your fromJson method you could do it like this:

Map<String,dynamic> response={'att1':1234,'att2':'oneTwoThree','createdAt':DateTime(2022,08,22)};
    return LifeDiagnosisResultUiModel.fromJson(response);

Upvotes: 0

Jun
Jun

Reputation: 541

I found the answer...

it is not a real answer of my question, but it can explain why this issue happen.

In dart, Map's DateTime cannot be converted to Object's DateTime.

I dont know a detail process, but in type casting, Map's DateTime is converted to String type.

Upvotes: 1

Related Questions