Extracted pagination data into a generic DTO.

This commit is contained in:
Faris Armoush
2025-06-22 16:00:20 +03:00
parent 28ac911f3f
commit 41d4fbb555
6 changed files with 53 additions and 75 deletions
@@ -0,0 +1,45 @@
import 'package:equatable/equatable.dart';
class PaginatedDataModel<T> extends Equatable {
const PaginatedDataModel({
required this.data,
required this.page,
required this.size,
required this.hasNext,
required this.totalItems,
required this.totalPages,
});
final List<T> data;
final int page;
final int size;
final bool hasNext;
final int totalItems;
final int totalPages;
factory PaginatedDataModel.fromJson(
Map<String, dynamic> json,
T Function(Map<String, dynamic>) fromJsonT,
) {
return PaginatedDataModel<T>(
data: (json['data'] as List<dynamic>? ?? [])
.map((e) => fromJsonT(e as Map<String, dynamic>))
.toList(),
page: json['page'] as int? ?? 1,
size: json['size'] as int? ?? 25,
hasNext: json['hasNext'] as bool? ?? false,
totalItems: json['totalItem'] as int? ?? 0,
totalPages: json['totalPage'] as int? ?? 0,
);
}
@override
List<Object?> get props => [
data,
page,
size,
hasNext,
totalItems,
totalPages,
];
}