Skip to content

Instantly share code, notes, and snippets.

@devmsh
Last active April 11, 2020 08:47
Show Gist options
  • Save devmsh/ed17311942cf7638199410f937111aa1 to your computer and use it in GitHub Desktop.
Save devmsh/ed17311942cf7638199410f937111aa1 to your computer and use it in GitHub Desktop.
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];
}
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;
}
}
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