Aller au contenu principal

Pagination

L'API Mastodon utilise une pagination par curseur. Cette bibliothèque l'abstrait via MastodonPage<T>.

Structure de MastodonPage

class MastodonPage<T> {
final List<T> items; // Items in the current page
final String? nextMaxId; // Cursor for the next page (older)
final String? prevMinId; // Cursor for the previous page (newer)
}

Utilisation de base

Récupérer la première page

final page = await client.notifications.fetch(limit: 20);

for (final notification in page.items) {
print(notification.type);
}

Récupérer la page suivante (plus ancienne)

Passez nextMaxId comme paramètre maxId :

if (page.nextMaxId != null) {
final nextPage = await client.notifications.fetch(
limit: 20,
maxId: page.nextMaxId,
);
}

Récupérer la page précédente (plus récente)

Passez prevMinId comme paramètre minId :

if (page.prevMinId != null) {
final prevPage = await client.notifications.fetch(
limit: 20,
minId: page.prevMinId,
);
}

Paramètres de pagination

ParamètreDirectionDescription
maxIdPlus ancienRetourner les résultats avant cet ID
sinceIdPlus récentRetourner les résultats après cet ID (peut avoir des interruptions)
minIdPlus récentRetourner les résultats immédiatement après cet ID (sans interruption)
limit-Nombre maximum de résultats (valeur par défaut du serveur si omis)

Différence entre sinceId et minId

  • sinceId : Retourne les limit résultats les plus récents parmi ceux postérieurs à l'ID donné (peut sauter des éléments intermédiaires)
  • minId : Retourne limit résultats en commençant immédiatement après l'ID donné (pagination séquentielle sans interruption)

Utilisez sinceId pour vérifier les mises à jour en temps réel. Utilisez minId pour la traversée séquentielle des pages.

Itérer sur toutes les pages

Future<List<MastodonNotification>> fetchAll() async {
final all = <MastodonNotification>[];
String? maxId;

while (true) {
final page = await client.notifications.fetch(
limit: 40,
maxId: maxId,
);
all.addAll(page.items);

if (page.nextMaxId == null) break;
maxId = page.nextMaxId;
}

return all;
}
attention

Récupérer de grandes quantités de données en une seule fois charge le serveur. Soyez attentif aux limites de débit.

APIs avec pagination

Les principales APIs retournant des résultats paginés :

  • client.notifications.fetch() — Notifications
  • client.accounts.fetchFollowers() — Abonnés
  • client.accounts.fetchFollowing() — Abonnements
  • client.accounts.fetchStatuses() — Statuts d'un compte
  • client.timelines.* — Fils d'actualité
  • client.favourites.fetch() — Favoris
  • client.bookmarks.fetch() — Signets
  • client.blocks.fetch() — Comptes bloqués
  • client.mutes.fetch() — Comptes masqués