[FIX] chat: fix message pagination logic
`loadInitial()` fetched 100 messages while `_page_size` was 20, so `_has_more` turned false too early and history stopped around 10h back. `loadMore()` also used `_currentPage * _page_size` for offset, causing duplicates. Use `_page_size` for initial load and rely on current message count as offset. This removes `_currentPage` entirely and lets older messages load correctly. Signed-off-by: Texas0295 <kimura@texas0295.top>
This commit is contained in:
		@@ -289,7 +289,6 @@ class MessagesNotifier extends _$MessagesNotifier {
 | 
			
		||||
  bool? _withAttachments;
 | 
			
		||||
 | 
			
		||||
  late final String _roomId;
 | 
			
		||||
  int _currentPage = 0;
 | 
			
		||||
  static const int _pageSize = 20;
 | 
			
		||||
  bool _hasMore = true;
 | 
			
		||||
  bool _isSyncing = false;
 | 
			
		||||
@@ -570,9 +569,11 @@ class MessagesNotifier extends _$MessagesNotifier {
 | 
			
		||||
  if (_searchQuery == null || _searchQuery!.isEmpty) {
 | 
			
		||||
    syncMessages();
 | 
			
		||||
  }
 | 
			
		||||
    final messages = await _getCachedMessages(offset: 0, take: 100);
 | 
			
		||||
    _currentPage = 0;
 | 
			
		||||
 | 
			
		||||
  final messages = await _getCachedMessages(offset: 0, take: _pageSize);
 | 
			
		||||
 | 
			
		||||
  _hasMore = messages.length == _pageSize;
 | 
			
		||||
 | 
			
		||||
  state = AsyncValue.data(messages);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -582,11 +583,9 @@ class MessagesNotifier extends _$MessagesNotifier {
 | 
			
		||||
 | 
			
		||||
  try {
 | 
			
		||||
    final currentMessages = state.value ?? [];
 | 
			
		||||
      _currentPage++;
 | 
			
		||||
      final newMessages = await listMessages(
 | 
			
		||||
        offset: _currentPage * _pageSize,
 | 
			
		||||
        take: _pageSize,
 | 
			
		||||
      );
 | 
			
		||||
    final offset = currentMessages.length;
 | 
			
		||||
 | 
			
		||||
    final newMessages = await listMessages(offset: offset, take: _pageSize);
 | 
			
		||||
 | 
			
		||||
    if (newMessages.isEmpty || newMessages.length < _pageSize) {
 | 
			
		||||
      _hasMore = false;
 | 
			
		||||
@@ -603,7 +602,6 @@ class MessagesNotifier extends _$MessagesNotifier {
 | 
			
		||||
      stackTrace: stackTrace,
 | 
			
		||||
    );
 | 
			
		||||
    showErrorAlert(err);
 | 
			
		||||
      _currentPage--;
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user