Last active
April 11, 2020 08:47
-
-
Save devmsh/ed17311942cf7638199410f937111aa1 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import 'dart:convert'; | |
import 'package:equatable/equatable.dart'; | |
import 'package:iStoria/core/models/links.dart'; | |
import 'package:iStoria/core/models/meta.dart'; | |
import 'package:iStoria/core/models/response_converter.dart'; | |
import 'package:json_annotation/json_annotation.dart'; | |
part 'list_response.g.dart'; | |
@JsonSerializable(explicitToJson: true) | |
class ListResponse<T> extends Equatable { | |
@ResponseConverter() | |
final List<T> data; | |
final Links links; | |
final Meta meta; | |
ListResponse({ | |
this.data, | |
this.links, | |
this.meta, | |
}); | |
factory ListResponse.fromJson(Map<String, dynamic> json) => | |
_$ListResponseFromJson(json); | |
factory ListResponse.fromResponse(String fixture) { | |
return ListResponse.fromJson(json.decode(fixture)); | |
} | |
Map<String, dynamic> toJson() => _$ListResponseToJson(this); | |
@override | |
List<Object> get props => [data]; | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import 'package:iStoria/features/intro/data/models/intro_step.dart'; | |
import 'package:iStoria/features/stages/data/models/stage.dart'; | |
import 'package:iStoria/features/stories/data/models/story.dart'; | |
import 'package:iStoria/features/stories/data/models/story_page.dart'; | |
import 'package:iStoria/features/stories/data/models/summary.dart'; | |
import 'package:iStoria/features/stages/data/models/chapter.dart'; | |
import 'package:json_annotation/json_annotation.dart'; | |
class ResponseConverter<T> implements JsonConverter<T, Object> { | |
const ResponseConverter(); | |
@override | |
T fromJson(Object json) { | |
if (json is Map<String, dynamic>) { | |
switch (json['model_type']) { | |
case 'story': | |
return Story.fromJson(json) as T; | |
break; | |
case 'stage': | |
return Stage.fromJson(json) as T; | |
break; | |
case 'chapter': | |
return Chapter.fromJson(json) as T; | |
break; | |
case 'page': | |
return StoryPage.fromJson(json) as T; | |
break; | |
case 'summary': | |
return Summary.fromJson(json) as T; | |
break; | |
case 'step': | |
return IntroStep.fromJson(json) as T; | |
break; | |
} | |
} | |
return json as T; | |
} | |
@override | |
Object toJson(T object) { | |
return object; | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import 'dart:convert'; | |
import 'package:equatable/equatable.dart'; | |
import 'package:iStoria/core/models/response_converter.dart'; | |
import 'package:json_annotation/json_annotation.dart'; | |
part 'single_response.g.dart'; | |
@JsonSerializable(explicitToJson: true) | |
class SingleResponse<T> extends Equatable { | |
@ResponseConverter() | |
final T data; | |
SingleResponse(this.data); | |
factory SingleResponse.fromJson(Map<String, dynamic> json) => | |
_$SingleResponseFromJson(json); | |
factory SingleResponse.fromResponse(String fixture) { | |
return SingleResponse.fromJson(json.decode(fixture)); | |
} | |
Map<String, dynamic> toJson() => _$SingleResponseToJson(this); | |
@override | |
List<Object> get props => [data]; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment