🔀 Merge pull request #178 from Texas0295/v3

[FIX] chat: fix message pagination logic
This commit is contained in:
LittleSheep
2025-09-17 22:17:47 +08:00
committed by GitHub

View File

@@ -289,7 +289,6 @@ class MessagesNotifier extends _$MessagesNotifier {
bool? _withAttachments; bool? _withAttachments;
late final String _roomId; late final String _roomId;
int _currentPage = 0;
static const int _pageSize = 20; static const int _pageSize = 20;
bool _hasMore = true; bool _hasMore = true;
bool _isSyncing = false; bool _isSyncing = false;
@@ -565,47 +564,46 @@ class MessagesNotifier extends _$MessagesNotifier {
} }
} }
Future<void> loadInitial() async { Future<void> loadInitial() async {
developer.log('Loading initial messages', name: 'MessagesNotifier'); developer.log('Loading initial messages', name: 'MessagesNotifier');
if (_searchQuery == null || _searchQuery!.isEmpty) { if (_searchQuery == null || _searchQuery!.isEmpty) {
syncMessages(); syncMessages();
}
final messages = await _getCachedMessages(offset: 0, take: 100);
_currentPage = 0;
_hasMore = messages.length == _pageSize;
state = AsyncValue.data(messages);
} }
Future<void> loadMore() async { final messages = await _getCachedMessages(offset: 0, take: _pageSize);
if (!_hasMore || state is AsyncLoading) return;
developer.log('Loading more messages', name: 'MessagesNotifier');
try { _hasMore = messages.length == _pageSize;
final currentMessages = state.value ?? [];
_currentPage++;
final newMessages = await listMessages(
offset: _currentPage * _pageSize,
take: _pageSize,
);
if (newMessages.isEmpty || newMessages.length < _pageSize) { state = AsyncValue.data(messages);
_hasMore = false; }
}
state = AsyncValue.data( Future<void> loadMore() async {
_sortMessages([...currentMessages, ...newMessages]), if (!_hasMore || state is AsyncLoading) return;
); developer.log('Loading more messages', name: 'MessagesNotifier');
} catch (err, stackTrace) {
developer.log( try {
'Error loading more messages', final currentMessages = state.value ?? [];
name: 'MessagesNotifier', final offset = currentMessages.length;
error: err,
stackTrace: stackTrace, final newMessages = await listMessages(offset: offset, take: _pageSize);
);
showErrorAlert(err); if (newMessages.isEmpty || newMessages.length < _pageSize) {
_currentPage--; _hasMore = false;
} }
state = AsyncValue.data(
_sortMessages([...currentMessages, ...newMessages]),
);
} catch (err, stackTrace) {
developer.log(
'Error loading more messages',
name: 'MessagesNotifier',
error: err,
stackTrace: stackTrace,
);
showErrorAlert(err);
} }
}
Future<void> sendMessage( Future<void> sendMessage(
String content, String content,