fix(llc, core): fix message pagination parameters

This commit is contained in:
Salvatore Giordano
2022-05-13 11:45:36 +02:00
parent d5f449c04f
commit 4896c43342
9 changed files with 130 additions and 36 deletions
@@ -1,3 +1,5 @@
// ignore_for_file: deprecated_member_use_from_same_package
import 'package:equatable/equatable.dart';
import 'package:json_annotation/json_annotation.dart';
@@ -69,6 +71,11 @@ class PaginationParams extends Equatable {
this.greaterThanOrEqual,
this.lessThan,
this.lessThanOrEqual,
this.createdAtAfterOrEqual,
this.createdAtAfter,
this.createdAtBeforeOrEqual,
this.createdAtBefore,
this.createdAtAround,
}) : assert(
offset == null || offset == 0 || next == null,
'Cannot specify non-zero `offset` with `next` parameter',
@@ -82,9 +89,11 @@ class PaginationParams extends Equatable {
final int limit;
/// The amount of items requested before message ID from the APIs.
@Deprecated('before is deprecated, use limit instead')
final int before;
/// The amount of items requested after message ID from the APIs.
@Deprecated('after is deprecated, use limit instead')
final int after;
/// The offset of requesting items.
@@ -113,6 +122,26 @@ class PaginationParams extends Equatable {
@JsonKey(name: 'id_lte')
final String? lessThanOrEqual;
/// Filter on createdAt greater than or equal the given value.
@JsonKey(name: 'created_at_after_or_equal')
final DateTime? createdAtAfterOrEqual;
/// Filter on createdAt greater than the given value.
@JsonKey(name: 'created_at_after')
final DateTime? createdAtAfter;
/// Filter on createdAt smaller than or equal the given value.
@JsonKey(name: 'created_at_before_or_equal')
final DateTime? createdAtBeforeOrEqual;
/// Filter on createdAt smaller than the given value.
@JsonKey(name: 'created_at_before')
final DateTime? createdAtBefore;
/// Filter on createdAt around the given value.
@JsonKey(name: 'created_at_around')
final DateTime? createdAtAround;
/// Serialize model to json
Map<String, dynamic> toJson() => _$PaginationParamsToJson(this);
@@ -128,6 +157,11 @@ class PaginationParams extends Equatable {
String? greaterThanOrEqual,
String? lessThan,
String? lessThanOrEqual,
DateTime? createdAtAfterOrEqual,
DateTime? createdAtAfter,
DateTime? createdAtBeforeOrEqual,
DateTime? createdAtBefore,
DateTime? createdAtAround,
}) =>
PaginationParams(
limit: limit ?? this.limit,
@@ -140,6 +174,13 @@ class PaginationParams extends Equatable {
greaterThanOrEqual: greaterThanOrEqual ?? this.greaterThanOrEqual,
lessThan: lessThan ?? this.lessThan,
lessThanOrEqual: lessThanOrEqual ?? this.lessThanOrEqual,
createdAtAfterOrEqual:
createdAtAfterOrEqual ?? this.createdAtAfterOrEqual,
createdAtAfter: createdAtAfter ?? this.createdAtAfter,
createdAtBeforeOrEqual:
createdAtBeforeOrEqual ?? this.createdAtBeforeOrEqual,
createdAtBefore: createdAtBefore ?? this.createdAtBefore,
createdAtAround: createdAtAround ?? this.createdAtAround,
);
@override
@@ -30,6 +30,21 @@ PaginationParams _$PaginationParamsFromJson(Map<String, dynamic> json) =>
greaterThanOrEqual: json['id_gte'] as String?,
lessThan: json['id_lt'] as String?,
lessThanOrEqual: json['id_lte'] as String?,
createdAtAfterOrEqual: json['created_at_after_or_equal'] == null
? null
: DateTime.parse(json['created_at_after_or_equal'] as String),
createdAtAfter: json['created_at_after'] == null
? null
: DateTime.parse(json['created_at_after'] as String),
createdAtBeforeOrEqual: json['created_at_before_or_equal'] == null
? null
: DateTime.parse(json['created_at_before_or_equal'] as String),
createdAtBefore: json['created_at_before'] == null
? null
: DateTime.parse(json['created_at_before'] as String),
createdAtAround: json['created_at_around'] == null
? null
: DateTime.parse(json['created_at_around'] as String),
);
Map<String, dynamic> _$PaginationParamsToJson(PaginationParams instance) {
@@ -52,6 +67,15 @@ Map<String, dynamic> _$PaginationParamsToJson(PaginationParams instance) {
writeNotNull('id_gte', instance.greaterThanOrEqual);
writeNotNull('id_lt', instance.lessThan);
writeNotNull('id_lte', instance.lessThanOrEqual);
writeNotNull('created_at_after_or_equal',
instance.createdAtAfterOrEqual?.toIso8601String());
writeNotNull('created_at_after', instance.createdAtAfter?.toIso8601String());
writeNotNull('created_at_before_or_equal',
instance.createdAtBeforeOrEqual?.toIso8601String());
writeNotNull(
'created_at_before', instance.createdAtBefore?.toIso8601String());
writeNotNull(
'created_at_around', instance.createdAtAround?.toIso8601String());
return val;
}
@@ -12,7 +12,7 @@ part of 'attachment_file.dart';
T _$identity<T>(T value) => value;
final _privateConstructorUsedError = UnsupportedError(
'It seems like you constructed your class using `MyClass._()`. This constructor is only meant to be used by freezed and you are not supposed to need it nor use it.\nPlease check the documentation here for more information: https://github.com/rrousselGit/freezed#custom-getters-and-methods');
'It seems like you constructed your class using `MyClass._()`. This constructor is only meant to be used by freezed and you are not supposed to need it nor use it.\nPlease check the documentation here for more informations: https://github.com/rrousselGit/freezed#custom-getters-and-methods');
UploadState _$UploadStateFromJson(Map<String, dynamic> json) {
switch (json['runtimeType']) {
@@ -31,6 +31,39 @@ UploadState _$UploadStateFromJson(Map<String, dynamic> json) {
}
}
/// @nodoc
class _$UploadStateTearOff {
const _$UploadStateTearOff();
Preparing preparing() {
return const Preparing();
}
InProgress inProgress({required int uploaded, required int total}) {
return InProgress(
uploaded: uploaded,
total: total,
);
}
Success success() {
return const Success();
}
Failed failed({required String error}) {
return Failed(
error: error,
);
}
UploadState fromJson(Map<String, Object?> json) {
return UploadState.fromJson(json);
}
}
/// @nodoc
const $UploadState = _$UploadStateTearOff();
/// @nodoc
mixin _$UploadState {
@optionalTypeArgs
@@ -121,7 +154,7 @@ class _$PreparingCopyWithImpl<$Res> extends _$UploadStateCopyWithImpl<$Res>
/// @nodoc
@JsonSerializable()
class _$Preparing implements Preparing {
const _$Preparing({final String? $type}) : $type = $type ?? 'preparing';
const _$Preparing({String? $type}) : $type = $type ?? 'preparing';
factory _$Preparing.fromJson(Map<String, dynamic> json) =>
_$$PreparingFromJson(json);
@@ -140,7 +173,6 @@ class _$Preparing implements Preparing {
(other.runtimeType == runtimeType && other is Preparing);
}
@JsonKey(ignore: true)
@override
int get hashCode => runtimeType.hashCode;
@@ -269,7 +301,7 @@ class _$InProgressCopyWithImpl<$Res> extends _$UploadStateCopyWithImpl<$Res>
@JsonSerializable()
class _$InProgress implements InProgress {
const _$InProgress(
{required this.uploaded, required this.total, final String? $type})
{required this.uploaded, required this.total, String? $type})
: $type = $type ?? 'inProgress';
factory _$InProgress.fromJson(Map<String, dynamic> json) =>
@@ -297,7 +329,6 @@ class _$InProgress implements InProgress {
const DeepCollectionEquality().equals(other.total, total));
}
@JsonKey(ignore: true)
@override
int get hashCode => Object.hash(
runtimeType,
@@ -390,14 +421,14 @@ class _$InProgress implements InProgress {
}
abstract class InProgress implements UploadState {
const factory InProgress(
{required final int uploaded, required final int total}) = _$InProgress;
const factory InProgress({required int uploaded, required int total}) =
_$InProgress;
factory InProgress.fromJson(Map<String, dynamic> json) =
_$InProgress.fromJson;
int get uploaded => throw _privateConstructorUsedError;
int get total => throw _privateConstructorUsedError;
int get uploaded;
int get total;
@JsonKey(ignore: true)
$InProgressCopyWith<InProgress> get copyWith =>
throw _privateConstructorUsedError;
@@ -422,7 +453,7 @@ class _$SuccessCopyWithImpl<$Res> extends _$UploadStateCopyWithImpl<$Res>
/// @nodoc
@JsonSerializable()
class _$Success implements Success {
const _$Success({final String? $type}) : $type = $type ?? 'success';
const _$Success({String? $type}) : $type = $type ?? 'success';
factory _$Success.fromJson(Map<String, dynamic> json) =>
_$$SuccessFromJson(json);
@@ -441,7 +472,6 @@ class _$Success implements Success {
(other.runtimeType == runtimeType && other is Success);
}
@JsonKey(ignore: true)
@override
int get hashCode => runtimeType.hashCode;
@@ -563,7 +593,7 @@ class _$FailedCopyWithImpl<$Res> extends _$UploadStateCopyWithImpl<$Res>
/// @nodoc
@JsonSerializable()
class _$Failed implements Failed {
const _$Failed({required this.error, final String? $type})
const _$Failed({required this.error, String? $type})
: $type = $type ?? 'failed';
factory _$Failed.fromJson(Map<String, dynamic> json) =>
@@ -588,7 +618,6 @@ class _$Failed implements Failed {
const DeepCollectionEquality().equals(other.error, error));
}
@JsonKey(ignore: true)
@override
int get hashCode =>
Object.hash(runtimeType, const DeepCollectionEquality().hash(error));
@@ -679,11 +708,11 @@ class _$Failed implements Failed {
}
abstract class Failed implements UploadState {
const factory Failed({required final String error}) = _$Failed;
const factory Failed({required String error}) = _$Failed;
factory Failed.fromJson(Map<String, dynamic> json) = _$Failed.fromJson;
String get error => throw _privateConstructorUsedError;
String get error;
@JsonKey(ignore: true)
$FailedCopyWith<Failed> get copyWith => throw _privateConstructorUsedError;
}
@@ -889,7 +889,7 @@ class _StreamMessageListViewState extends State<StreamMessageListView> {
initialIndex = 0;
await streamChannel!.reloadChannel();
WidgetsBinding.instance?.addPostFrameCallback((_) {
WidgetsBinding.instance.addPostFrameCallback((_) {
_scrollController!.jumpTo(index: 0);
});
} else {
@@ -1341,7 +1341,7 @@ class _StreamMessageListViewState extends State<StreamMessageListView> {
if (event.message?.parentId == widget.parentMessage?.id &&
event.message!.user!.id ==
streamChannel!.channel.client.state.currentUser!.id) {
WidgetsBinding.instance!.addPostFrameCallback((_) {
WidgetsBinding.instance.addPostFrameCallback((_) {
_scrollController?.scrollTo(
index: 0,
duration: const Duration(seconds: 1),
@@ -1,3 +1,5 @@
// ignore_for_file: deprecated_member_use_from_same_package
import 'dart:async';
import 'dart:math';
@@ -1317,7 +1317,7 @@ void main() {
await setUpWidgetTest(tester, itemPositionsListener: itemPositionsListener);
final root = WidgetsBinding
.instance!.pipelineOwner.semanticsOwner!.rootSemanticsNode!;
.instance.pipelineOwner.semanticsOwner!.rootSemanticsNode!;
final semanticNodes = <SemanticsNode>[root];
@@ -322,7 +322,7 @@ class _PagedValueListViewState<K, V> extends State<PagedValueListView<K, V>> {
index == newPageRequestTriggerIndex;
if (nextPageKey != null && isBuildingTriggerIndexItem) {
// Schedules the request for the end of this frame.
WidgetsBinding.instance?.addPostFrameCallback((_) async {
WidgetsBinding.instance.addPostFrameCallback((_) async {
if (error == null) {
await _controller.loadMore(nextPageKey);
}
@@ -678,7 +678,7 @@ class _PagedValueGridViewState<K, V> extends State<PagedValueGridView<K, V>> {
index == newPageRequestTriggerIndex;
if (nextPageKey != null && isBuildingTriggerIndexItem) {
// Schedules the request for the end of this frame.
WidgetsBinding.instance?.addPostFrameCallback((_) async {
WidgetsBinding.instance.addPostFrameCallback((_) async {
if (error == null) {
await _controller.loadMore(nextPageKey);
}
@@ -220,21 +220,20 @@ class StreamChannelState extends State<StreamChannel> {
/// Loads channel at specific message
Future<void> loadChannelAtMessage(
String? messageId, {
int before = 20,
int after = 20,
@Deprecated('before is deprecated, use limit instead') int before = 20,
@Deprecated('before is deprecated, use limit instead') int after = 20,
int limit = 20,
bool preferOffline = false,
}) =>
_queryAtMessage(
messageId: messageId,
before: before,
after: after,
limit: limit,
preferOffline: preferOffline,
);
Future<ChannelState?> _queryAtMessage({
String? messageId,
int before = 20,
int after = 20,
int limit = 20,
bool preferOffline = false,
}) async {
if (channel.state == null) return null;
@@ -244,7 +243,7 @@ class StreamChannelState extends State<StreamChannel> {
if (messageId == null) {
await channel.query(
messagesPagination: PaginationParams(
limit: before,
limit: limit,
),
preferOffline: preferOffline,
);
@@ -254,8 +253,7 @@ class StreamChannelState extends State<StreamChannel> {
return queryAroundMessage(
messageId,
before: before,
after: after,
limit: limit,
preferOffline: preferOffline,
);
}
@@ -263,15 +261,15 @@ class StreamChannelState extends State<StreamChannel> {
///
Future<ChannelState> queryAroundMessage(
String messageId, {
int before = 20,
int after = 20,
@Deprecated('before is deprecated, use limit instead') int before = 20,
@Deprecated('after is deprecated, use limit instead') int after = 20,
int limit = 20,
bool preferOffline = false,
}) =>
channel.query(
messagesPagination: PaginationParams(
idAround: messageId,
before: before,
after: after,
limit: limit,
),
preferOffline: preferOffline,
);
@@ -338,7 +336,7 @@ class StreamChannelState extends State<StreamChannel> {
}
/// Reloads the channel with latest message
Future<void> reloadChannel() => _queryAtMessage(before: 30);
Future<void> reloadChannel() => _queryAtMessage(limit: 30);
late List<Future<bool>> _futures;
@@ -115,7 +115,7 @@ class StreamChatCoreState extends State<StreamChatCore>
@override
void initState() {
super.initState();
WidgetsBinding.instance?.addObserver(this);
WidgetsBinding.instance.addObserver(this);
_subscribeToConnectivityChange(widget.connectivityStream);
}
@@ -207,7 +207,7 @@ class StreamChatCoreState extends State<StreamChatCore>
@override
void dispose() {
WidgetsBinding.instance?.removeObserver(this);
WidgetsBinding.instance.removeObserver(this);
_unsubscribeFromConnectivityChange();
_eventSubscription?.cancel();
_disconnectTimer?.cancel();