Statuts
L'API client.statuses fournit des opérations pour créer, récupérer et interagir avec les statuts (publications).
Récupérer des statuts
Statut unique
final status = await client.statuses.fetch('12345');
print(status.content);
Plusieurs statuts
final statuses = await client.statuses.fetchMultiple(['1', '2', '3']);
Les IDs inexistants ou inaccessibles sont silencieusement exclus des résultats.
Statuts cités
Mastodon 4.5 et versions ultérieures expose la relation de citation sous la
forme MastodonQuote :
final quote = status.quote;
final quotedStatus = quote?.quotedStatus; // Statut visible intégré
final quotedStatusId = quote?.quotedStatusId; // ID dans un contexte imbriqué allégé
final state = quote?.state;
quotedStatus peut être null si une citation est en attente, indisponible ou
représentée par quotedStatusId dans une réponse imbriquée allégée. L'historique
des modifications expose également la relation via MastodonStatusEdit.quote.
Contexte du fil
final context = await client.statuses.fetchContext('12345');
print('${context.ancestors.length} ancestors');
print('${context.descendants.length} descendants');
Historique des modifications
final history = await client.statuses.fetchHistory('12345');
for (final edit in history) {
print(edit.content);
}
Source (pour l'édition)
final source = await client.statuses.fetchSource('12345');
print(source.text); // Plain text content
print(source.spoilerText); // CW text
Créer un statut
final result = await client.statuses.create(
MastodonStatusCreateRequest(
status: 'Hello, Mastodon!',
visibility: MastodonVisibility.public,
),
);
// result is MastodonStatusCreated or MastodonStatusScheduled
if (result case MastodonStatusCreated(:final status)) {
print('Posted: ${status.url}');
}
Avec des médias
final attachment = await client.media.upload(imageBytes, 'photo.jpg',
description: 'A beautiful sunset',
);
final result = await client.statuses.create(
MastodonStatusCreateRequest(
status: 'Check this out!',
mediaIds: [attachment.id],
),
);
Avec un sondage
final result = await client.statuses.create(
MastodonStatusCreateRequest(
status: 'What do you prefer?',
poll: MastodonPollCreateRequest(
options: ['Option A', 'Option B', 'Option C'],
expiresIn: 86400, // 24 hours
multiple: false,
),
),
);
Statut planifié
final result = await client.statuses.create(
MastodonStatusCreateRequest(
status: 'This will be posted later',
scheduledAt: '2025-12-31T00:00:00.000Z',
),
);
if (result case MastodonStatusScheduled(:final scheduledStatus)) {
print('Scheduled for: ${scheduledStatus.scheduledAt}');
}
Idempotence
final result = await client.statuses.create(
request,
idempotencyKey: 'unique-key-123',
);
Les requêtes répétées avec la même clé retournent le même résultat.
Modifier un statut
final updated = await client.statuses.edit(
'12345',
MastodonStatusEditRequest(
status: 'Updated content',
),
);
Supprimer un statut
final deleted = await client.statuses.delete('12345');
// Returns a snapshot with source info for redraft purposes
print(deleted.text);
Interactions
Booster / annuler le boost
final boosted = await client.statuses.boost('12345');
// Returns a wrapper status; the original is in boosted.reblog
final unboosted = await client.statuses.unboost('12345');
// Returns the original status directly
Ajouter / retirer des favoris
await client.statuses.favourite('12345');
await client.statuses.unfavourite('12345');
Ajouter / supprimer un signet
await client.statuses.bookmark('12345');
await client.statuses.unbookmark('12345');
Mettre en sourdine / réactiver la conversation
await client.statuses.mute('12345'); // Stop thread notifications
await client.statuses.unmute('12345');
Épingler / désépingler
await client.statuses.pin('12345');
await client.statuses.unpin('12345');
Qui a boosté / mis en favori
final boosters = await client.statuses.fetchRebloggedBy('12345', limit: 40);
final favouriters = await client.statuses.fetchFavouritedBy('12345', limit: 40);
Les deux retournent MastodonPage<MastodonAccount> avec pagination.
Traduction
final translation = await client.statuses.translate('12345', lang: 'en');
print(translation.content);
Seuls les statuts publics ou non listés peuvent être traduits.