24 lines
762 B
Dart
24 lines
762 B
Dart
import 'package:freezed_annotation/freezed_annotation.dart';
|
|
|
|
part 'pagination.freezed.dart';
|
|
part 'pagination.g.dart';
|
|
|
|
@Freezed(genericArgumentFactories: true)
|
|
class PaginatedResponse<T> with _$PaginatedResponse<T> {
|
|
const factory PaginatedResponse({
|
|
required List<T> items,
|
|
required int total,
|
|
required int page,
|
|
@JsonKey(name: 'page_size') required int pageSize,
|
|
@JsonKey(name: 'total_pages') required int totalPages,
|
|
@JsonKey(name: 'has_next') @Default(false) bool hasNext,
|
|
@JsonKey(name: 'has_prev') @Default(false) bool hasPrev,
|
|
}) = _PaginatedResponse<T>;
|
|
|
|
factory PaginatedResponse.fromJson(
|
|
Map<String, dynamic> json,
|
|
T Function(Object?) fromJsonT,
|
|
) =>
|
|
_$PaginatedResponseFromJson(json, fromJsonT);
|
|
}
|