feat: Added a queryAround implementation
This commit is contained in:
@@ -60,8 +60,11 @@ class PaginationParams extends Equatable {
|
|||||||
/// ```
|
/// ```
|
||||||
const PaginationParams({
|
const PaginationParams({
|
||||||
this.limit = 10,
|
this.limit = 10,
|
||||||
|
this.before = 10,
|
||||||
|
this.after = 10,
|
||||||
this.offset,
|
this.offset,
|
||||||
this.next,
|
this.next,
|
||||||
|
this.aroundId,
|
||||||
this.greaterThan,
|
this.greaterThan,
|
||||||
this.greaterThanOrEqual,
|
this.greaterThanOrEqual,
|
||||||
this.lessThan,
|
this.lessThan,
|
||||||
@@ -78,12 +81,22 @@ class PaginationParams extends Equatable {
|
|||||||
/// The amount of items requested from the APIs.
|
/// The amount of items requested from the APIs.
|
||||||
final int limit;
|
final int limit;
|
||||||
|
|
||||||
|
/// The amount of items requested before message ID from the APIs.
|
||||||
|
final int before;
|
||||||
|
|
||||||
|
/// The amount of items requested after message ID from the APIs.
|
||||||
|
final int after;
|
||||||
|
|
||||||
/// The offset of requesting items.
|
/// The offset of requesting items.
|
||||||
final int? offset;
|
final int? offset;
|
||||||
|
|
||||||
/// A key used to paginate.
|
/// A key used to paginate.
|
||||||
final String? next;
|
final String? next;
|
||||||
|
|
||||||
|
/// Message ID to fetch messages around
|
||||||
|
@JsonKey(name: 'around_id')
|
||||||
|
final String? aroundId;
|
||||||
|
|
||||||
/// Filter on ids greater than the given value.
|
/// Filter on ids greater than the given value.
|
||||||
@JsonKey(name: 'id_gt')
|
@JsonKey(name: 'id_gt')
|
||||||
final String? greaterThan;
|
final String? greaterThan;
|
||||||
@@ -106,7 +119,10 @@ class PaginationParams extends Equatable {
|
|||||||
/// Creates a copy of [PaginationParams] with specified attributes overridden.
|
/// Creates a copy of [PaginationParams] with specified attributes overridden.
|
||||||
PaginationParams copyWith({
|
PaginationParams copyWith({
|
||||||
int? limit,
|
int? limit,
|
||||||
|
int? before,
|
||||||
|
int? after,
|
||||||
int? offset,
|
int? offset,
|
||||||
|
String? aroundId,
|
||||||
String? next,
|
String? next,
|
||||||
String? greaterThan,
|
String? greaterThan,
|
||||||
String? greaterThanOrEqual,
|
String? greaterThanOrEqual,
|
||||||
@@ -115,7 +131,10 @@ class PaginationParams extends Equatable {
|
|||||||
}) =>
|
}) =>
|
||||||
PaginationParams(
|
PaginationParams(
|
||||||
limit: limit ?? this.limit,
|
limit: limit ?? this.limit,
|
||||||
|
before: before ?? this.before,
|
||||||
|
after: limit ?? this.after,
|
||||||
offset: offset ?? this.offset,
|
offset: offset ?? this.offset,
|
||||||
|
aroundId: aroundId ?? this.aroundId,
|
||||||
next: next ?? this.next,
|
next: next ?? this.next,
|
||||||
greaterThan: greaterThan ?? this.greaterThan,
|
greaterThan: greaterThan ?? this.greaterThan,
|
||||||
greaterThanOrEqual: greaterThanOrEqual ?? this.greaterThanOrEqual,
|
greaterThanOrEqual: greaterThanOrEqual ?? this.greaterThanOrEqual,
|
||||||
@@ -126,8 +145,11 @@ class PaginationParams extends Equatable {
|
|||||||
@override
|
@override
|
||||||
List<Object?> get props => [
|
List<Object?> get props => [
|
||||||
limit,
|
limit,
|
||||||
|
before,
|
||||||
|
after,
|
||||||
offset,
|
offset,
|
||||||
next,
|
next,
|
||||||
|
aroundId,
|
||||||
greaterThan,
|
greaterThan,
|
||||||
greaterThanOrEqual,
|
greaterThanOrEqual,
|
||||||
lessThan,
|
lessThan,
|
||||||
|
|||||||
@@ -21,8 +21,11 @@ Map<String, dynamic> _$SortOptionToJson<T>(SortOption<T> instance) =>
|
|||||||
PaginationParams _$PaginationParamsFromJson(Map<String, dynamic> json) =>
|
PaginationParams _$PaginationParamsFromJson(Map<String, dynamic> json) =>
|
||||||
PaginationParams(
|
PaginationParams(
|
||||||
limit: json['limit'] as int? ?? 10,
|
limit: json['limit'] as int? ?? 10,
|
||||||
|
before: json['before'] as int? ?? 10,
|
||||||
|
after: json['after'] as int? ?? 10,
|
||||||
offset: json['offset'] as int?,
|
offset: json['offset'] as int?,
|
||||||
next: json['next'] as String?,
|
next: json['next'] as String?,
|
||||||
|
aroundId: json['around_id'] as String?,
|
||||||
greaterThan: json['id_gt'] as String?,
|
greaterThan: json['id_gt'] as String?,
|
||||||
greaterThanOrEqual: json['id_gte'] as String?,
|
greaterThanOrEqual: json['id_gte'] as String?,
|
||||||
lessThan: json['id_lt'] as String?,
|
lessThan: json['id_lt'] as String?,
|
||||||
@@ -32,6 +35,8 @@ PaginationParams _$PaginationParamsFromJson(Map<String, dynamic> json) =>
|
|||||||
Map<String, dynamic> _$PaginationParamsToJson(PaginationParams instance) {
|
Map<String, dynamic> _$PaginationParamsToJson(PaginationParams instance) {
|
||||||
final val = <String, dynamic>{
|
final val = <String, dynamic>{
|
||||||
'limit': instance.limit,
|
'limit': instance.limit,
|
||||||
|
'before': instance.before,
|
||||||
|
'after': instance.after,
|
||||||
};
|
};
|
||||||
|
|
||||||
void writeNotNull(String key, dynamic value) {
|
void writeNotNull(String key, dynamic value) {
|
||||||
@@ -42,6 +47,7 @@ Map<String, dynamic> _$PaginationParamsToJson(PaginationParams instance) {
|
|||||||
|
|
||||||
writeNotNull('offset', instance.offset);
|
writeNotNull('offset', instance.offset);
|
||||||
writeNotNull('next', instance.next);
|
writeNotNull('next', instance.next);
|
||||||
|
writeNotNull('around_id', instance.aroundId);
|
||||||
writeNotNull('id_gt', instance.greaterThan);
|
writeNotNull('id_gt', instance.greaterThan);
|
||||||
writeNotNull('id_gte', instance.greaterThanOrEqual);
|
writeNotNull('id_gte', instance.greaterThanOrEqual);
|
||||||
writeNotNull('id_lt', instance.lessThan);
|
writeNotNull('id_lt', instance.lessThan);
|
||||||
|
|||||||
@@ -249,19 +249,31 @@ class StreamChannelState extends State<StreamChannel> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
return Future.wait([
|
return Future.wait([
|
||||||
queryBeforeMessage(
|
queryAroundMessage(
|
||||||
messageId,
|
messageId,
|
||||||
limit: before,
|
before: before,
|
||||||
preferOffline: preferOffline,
|
after: after,
|
||||||
),
|
|
||||||
queryAfterMessage(
|
|
||||||
messageId,
|
|
||||||
limit: after,
|
|
||||||
preferOffline: preferOffline,
|
preferOffline: preferOffline,
|
||||||
),
|
),
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
///
|
||||||
|
Future<ChannelState> queryAroundMessage(
|
||||||
|
String messageId, {
|
||||||
|
int before = 20,
|
||||||
|
int after = 20,
|
||||||
|
bool preferOffline = false,
|
||||||
|
}) =>
|
||||||
|
channel.query(
|
||||||
|
messagesPagination: PaginationParams(
|
||||||
|
aroundId: messageId,
|
||||||
|
before: before,
|
||||||
|
after: after,
|
||||||
|
),
|
||||||
|
preferOffline: preferOffline,
|
||||||
|
);
|
||||||
|
|
||||||
///
|
///
|
||||||
Future<ChannelState> queryBeforeMessage(
|
Future<ChannelState> queryBeforeMessage(
|
||||||
String messageId, {
|
String messageId, {
|
||||||
|
|||||||
Reference in New Issue
Block a user