2023-01-24 03:37:09 +00:00
|
|
|
class PagingData {
|
|
|
|
static const DEFAULT_LIMIT = 50;
|
|
|
|
|
|
|
|
final int? minId;
|
|
|
|
final int? maxId;
|
|
|
|
final int? sinceId;
|
2023-01-29 21:46:22 +00:00
|
|
|
final int? offset;
|
2023-01-24 03:37:09 +00:00
|
|
|
final int limit;
|
|
|
|
|
|
|
|
PagingData({
|
|
|
|
this.minId,
|
|
|
|
this.maxId,
|
|
|
|
this.sinceId,
|
2023-01-29 21:46:22 +00:00
|
|
|
this.offset,
|
2023-01-24 03:37:09 +00:00
|
|
|
this.limit = DEFAULT_LIMIT,
|
|
|
|
});
|
|
|
|
|
|
|
|
factory PagingData.fromQueryParameters(Uri uri) {
|
|
|
|
final minIdString = uri.queryParameters['min_id'];
|
|
|
|
final maxIdString = uri.queryParameters['max_id'];
|
|
|
|
final sinceIdString = uri.queryParameters['since_id'];
|
2023-01-29 21:46:22 +00:00
|
|
|
final limitString =
|
|
|
|
uri.queryParameters['limit'] ?? uri.queryParameters['count'];
|
|
|
|
final offsetString = uri.queryParameters['offset'];
|
2023-01-24 03:37:09 +00:00
|
|
|
return PagingData(
|
|
|
|
minId: int.tryParse(minIdString ?? ''),
|
|
|
|
maxId: int.tryParse(maxIdString ?? ''),
|
|
|
|
sinceId: int.tryParse(sinceIdString ?? ''),
|
2023-01-29 21:46:22 +00:00
|
|
|
offset: int.tryParse(offsetString ?? ''),
|
2023-01-24 03:37:09 +00:00
|
|
|
limit: int.tryParse(limitString ?? '') ?? DEFAULT_LIMIT,
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
2023-01-25 01:53:55 +00:00
|
|
|
String toQueryParameters({String limitKeyword = 'limit'}) {
|
|
|
|
var pagingData = '$limitKeyword=$limit';
|
2023-01-24 03:37:09 +00:00
|
|
|
if (minId != null) {
|
|
|
|
pagingData = '$pagingData&min_id=$minId';
|
|
|
|
}
|
|
|
|
|
|
|
|
if (sinceId != null) {
|
|
|
|
pagingData = '$pagingData&since_id=$sinceId';
|
|
|
|
}
|
|
|
|
|
|
|
|
if (maxId != null) {
|
|
|
|
pagingData = '$pagingData&max_id=$maxId';
|
|
|
|
}
|
|
|
|
|
2023-01-29 21:46:22 +00:00
|
|
|
if (offset != null) {
|
|
|
|
pagingData = '$pagingData&offset=$offset';
|
|
|
|
}
|
|
|
|
|
2023-01-24 03:37:09 +00:00
|
|
|
return pagingData;
|
|
|
|
}
|
|
|
|
|
2023-02-10 10:29:02 +00:00
|
|
|
bool get isLimitOnly =>
|
|
|
|
minId == null && maxId == null && sinceId == null && offset == null;
|
|
|
|
|
2023-01-24 03:37:09 +00:00
|
|
|
@override
|
|
|
|
String toString() {
|
2023-01-29 21:46:22 +00:00
|
|
|
return 'PagingData{maxId: $maxId, minId: $minId, sinceId: $sinceId, offset: $offset, limit: $limit}';
|
2023-01-24 03:37:09 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
@override
|
|
|
|
bool operator ==(Object other) =>
|
|
|
|
identical(this, other) ||
|
2023-02-10 10:29:02 +00:00
|
|
|
other is PagingData &&
|
|
|
|
runtimeType == other.runtimeType &&
|
|
|
|
minId == other.minId &&
|
|
|
|
maxId == other.maxId &&
|
|
|
|
sinceId == other.sinceId &&
|
|
|
|
offset == other.offset &&
|
|
|
|
limit == other.limit;
|
2023-01-24 03:37:09 +00:00
|
|
|
|
|
|
|
@override
|
|
|
|
int get hashCode =>
|
2023-01-29 21:46:22 +00:00
|
|
|
minId.hashCode ^
|
|
|
|
maxId.hashCode ^
|
|
|
|
sinceId.hashCode ^
|
|
|
|
offset.hashCode ^
|
|
|
|
limit.hashCode;
|
2023-01-24 03:37:09 +00:00
|
|
|
}
|