к черту пагинацию
This commit is contained in:
parent
57d946a8a2
commit
1d53a1c62b
@ -3,56 +3,26 @@ import 'package:json_annotation/json_annotation.dart';
|
||||
part 'thrones_character_dto.g.dart';
|
||||
|
||||
@JsonSerializable(createToJson: false)
|
||||
class ThronesCharactersDto {
|
||||
final List<ThronesCharacterDataDto> characters;
|
||||
final InfoDto? info;
|
||||
class ThronesCharacterDto {
|
||||
final int id;
|
||||
final String firstName;
|
||||
final String lastName;
|
||||
final String fullName;
|
||||
final String title;
|
||||
final String family;
|
||||
final String image;
|
||||
final String imageUrl;
|
||||
|
||||
const ThronesCharactersDto({required this.characters, this.info});
|
||||
ThronesCharacterDto({
|
||||
required this.id,
|
||||
required this.firstName,
|
||||
required this.lastName,
|
||||
required this.fullName,
|
||||
required this.title,
|
||||
required this.family,
|
||||
required this.image,
|
||||
required this.imageUrl,
|
||||
});
|
||||
|
||||
factory ThronesCharactersDto.fromJson(List<dynamic> json) {
|
||||
final List<ThronesCharacterDataDto> characters = json
|
||||
.map((item) => ThronesCharacterDataDto.fromJson(item as Map<String, dynamic>))
|
||||
.toList();
|
||||
return ThronesCharactersDto(characters: characters);
|
||||
}
|
||||
}
|
||||
|
||||
@JsonSerializable(createToJson: false)
|
||||
class ThronesCharacterDataDto {
|
||||
final int? id;
|
||||
final String? firstName;
|
||||
final String? lastName;
|
||||
final String? fullName;
|
||||
final String? title;
|
||||
final String? family;
|
||||
final String? image;
|
||||
final String? imageUrl;
|
||||
|
||||
const ThronesCharacterDataDto(
|
||||
{this.id, this.firstName, this.lastName, this.fullName, this.title, this.family, this.image, this.imageUrl,});
|
||||
|
||||
factory ThronesCharacterDataDto.fromJson(Map<String, dynamic> json) =>
|
||||
_$ThronesCharacterDataDtoFromJson(json);
|
||||
}
|
||||
|
||||
@JsonSerializable(createToJson: false)
|
||||
class InfoDto {
|
||||
final String? next;
|
||||
final String? last;
|
||||
final int? nextPage;
|
||||
final int? lastPage;
|
||||
|
||||
InfoDto({this.next, this.last})
|
||||
: nextPage = _extractPageNumber(next),
|
||||
lastPage = _extractPageNumber(last);
|
||||
|
||||
static int? _extractPageNumber(String? url) {
|
||||
if (url == null) return null;
|
||||
final RegExp regExp = RegExp(r'page=(\d+)');
|
||||
final Match? match = regExp.firstMatch(url);
|
||||
return match != null ? int.parse(match.group(1)!) : null;
|
||||
}
|
||||
|
||||
factory InfoDto.fromJson(Map<String, dynamic> json) =>
|
||||
_$InfoDtoFromJson(json);
|
||||
factory ThronesCharacterDto.fromJson(Map<String, dynamic> json) => _$ThronesCharacterDtoFromJson(json);
|
||||
}
|
@ -6,32 +6,14 @@ part of 'thrones_character_dto.dart';
|
||||
// JsonSerializableGenerator
|
||||
// **************************************************************************
|
||||
|
||||
ThronesCharactersDto _$ThronesCharactersDtoFromJson(
|
||||
Map<String, dynamic> json) =>
|
||||
ThronesCharactersDto(
|
||||
characters: (json['characters'] as List<dynamic>)
|
||||
.map((e) =>
|
||||
ThronesCharacterDataDto.fromJson(e as Map<String, dynamic>))
|
||||
.toList(),
|
||||
info: json['info'] == null
|
||||
? null
|
||||
: InfoDto.fromJson(json['info'] as Map<String, dynamic>),
|
||||
);
|
||||
|
||||
ThronesCharacterDataDto _$ThronesCharacterDataDtoFromJson(
|
||||
Map<String, dynamic> json) =>
|
||||
ThronesCharacterDataDto(
|
||||
id: (json['id'] as num?)?.toInt(),
|
||||
firstName: json['firstName'] as String?,
|
||||
lastName: json['lastName'] as String?,
|
||||
fullName: json['fullName'] as String?,
|
||||
title: json['title'] as String?,
|
||||
family: json['family'] as String?,
|
||||
image: json['image'] as String?,
|
||||
imageUrl: json['imageUrl'] as String?,
|
||||
);
|
||||
|
||||
InfoDto _$InfoDtoFromJson(Map<String, dynamic> json) => InfoDto(
|
||||
next: json['next'] as String?,
|
||||
last: json['last'] as String?,
|
||||
ThronesCharacterDto _$ThronesCharacterDtoFromJson(Map<String, dynamic> json) =>
|
||||
ThronesCharacterDto(
|
||||
id: (json['id'] as num).toInt(),
|
||||
firstName: json['firstName'] as String,
|
||||
lastName: json['lastName'] as String,
|
||||
fullName: json['fullName'] as String,
|
||||
title: json['title'] as String,
|
||||
family: json['family'] as String,
|
||||
image: json['image'] as String,
|
||||
imageUrl: json['imageUrl'] as String,
|
||||
);
|
||||
|
@ -5,7 +5,7 @@ import 'package:flutter_app/domain/models/home.dart';
|
||||
const _imagePlaceholder =
|
||||
'https://upload.wikimedia.org/wikipedia/en/archive/b/b1/20210811082420%21Portrait_placeholder.png';
|
||||
|
||||
extension ThronesCharacterDtoToModel on ThronesCharacterDataDto {
|
||||
extension ThronesCharacterDtoToModel on ThronesCharacterDto {
|
||||
CardData toDomain() => CardData(
|
||||
descriptionText: _makeDescriptionText(title, family),
|
||||
firstName: firstName,
|
||||
@ -27,10 +27,3 @@ extension ThronesCharacterDtoToModel on ThronesCharacterDataDto {
|
||||
: '';
|
||||
}
|
||||
}
|
||||
|
||||
extension ThronesCharactersDtoToModel on ThronesCharactersDto {
|
||||
HomeData toDomain() => HomeData(
|
||||
data: characters.map((e) => e.toDomain()).toList(),
|
||||
nextPage: info?.nextPage,
|
||||
);
|
||||
}
|
@ -7,11 +7,7 @@ import 'package:flutter_app/domain/models/home.dart';
|
||||
import 'package:pretty_dio_logger/pretty_dio_logger.dart';
|
||||
|
||||
class ThronesRepository extends ApiInterface {
|
||||
static final Dio _dio = Dio()
|
||||
..interceptors.add(PrettyDioLogger(
|
||||
requestHeader: true,
|
||||
requestBody: true,
|
||||
));
|
||||
static final Dio _dio = Dio();
|
||||
|
||||
static const String _baseUrl = 'https://thronesapi.com';
|
||||
|
||||
@ -24,16 +20,14 @@ class ThronesRepository extends ApiInterface {
|
||||
try {
|
||||
const String url = '$_baseUrl/api/v2/Characters';
|
||||
|
||||
final Response<dynamic> response = await _dio.get<List<dynamic>>(
|
||||
url,
|
||||
);
|
||||
final Response<dynamic> response = await _dio.get<List<dynamic>>(url);
|
||||
|
||||
final List<ThronesCharacterDataDto> characters = (response.data as List<dynamic>)
|
||||
.map((e) => ThronesCharacterDataDto.fromJson(e as Map<String, dynamic>))
|
||||
final List<ThronesCharacterDto> characters = (response.data as List<dynamic>)
|
||||
.map((e) => ThronesCharacterDto.fromJson(e as Map<String, dynamic>))
|
||||
.toList();
|
||||
|
||||
final List<CardData> data = characters
|
||||
.where((character) => q == null || character.fullName!.toLowerCase().contains(q.toLowerCase()))
|
||||
.where((character) => q == null || character.fullName.toLowerCase().contains(q.toLowerCase()))
|
||||
.map((e) => e.toDomain())
|
||||
.toList();
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user