loadOlderMessages method

Future<MessageListResult> loadOlderMessages({
  1. required int talkMode,
  2. required int toFromId,
  3. required String beforeSequence,
  4. int count = 30,
})

上拉更早消息:先查本地;本地该页为空时才打网,写库后再读本地。

Implementation

Future<MessageListResult> loadOlderMessages({
  required int talkMode,
  required int toFromId,
  required String beforeSequence,
  int count = 30,
}) async {
  final local = await _store.queryMessages(
    talkMode: talkMode,
    toFromId: toFromId,
    cursor: beforeSequence,
    limit: count,
  );
  if (local.items.isNotEmpty) return local;

  final before = int.tryParse(beforeSequence) ?? 0;
  if (before <= 0 || !_net.isOnline) return local;

  try {
    final remote = await _fetchRecordsPage(
      talkMode: talkMode,
      toFromId: toFromId,
      cursor: beforeSequence,
      limit: count,
    );
    if (remote.isNotEmpty) {
      await _store.upsertMessages(remote);
    }
  } catch (e) {
    GoChatLogger.e('loadOlderMessages network failed', e);
    return local;
  }

  return _store.queryMessages(
    talkMode: talkMode,
    toFromId: toFromId,
    cursor: beforeSequence,
    limit: count,
  );
}