fix(llc, core): fix message pagination parameters
This commit is contained in:
@@ -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';
|
||||
|
||||
|
||||
+1
-1
@@ -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();
|
||||
|
||||
Reference in New Issue
Block a user