Conception de la politique de feed vidéo (prefetch, layout, garde-fous de scroll) ; intégration API et refactoring de l'architecture cliente en complément

Politique de feed vidéo — prefetch, layout et garde-fous de scroll

Politique de feed vidéo testable en Dart pur : prefetch borné, hauteur clampée, mode carte portrait, annulation au scroll rapide — intégration API et refactoring en complément.

0,35–0,75
hauteur média (fractions écran)
0,8
seuil mode carte portrait
±1
rayon index lecteur actif

Contexte

Application mobile sociale Flutter (cagnottes / collecte) : feed type réseau social avec vidéos ; SDKs métier modulaires séparés de la couche UI. Le rendu reste dans l'app ; la politique de nombres est partagée.

Le problème

Mélanger layout, prefetch et lecteur dans les widgets rendait la politique non testable et difficile à réutiliser. Un préchargement trop agressif saturait le réseau ; des ratios non bornés produisaient des posts illisibles.

L'approche

  • Package Dart pur sans Flutter : calculs de ratio, hauteur clampée (facteurs 0,35–0,75), largeur « carte » sous seuil portrait 0,8.
  • Prefetch d'URLs images sur N posts suivants avec dédoublonnage d'ordre ; lecteur vidéo limité au voisinage (rayon d'index actif ±1).
  • Suivi de vélocité de scroll et états (scroll rapide / focus) pour autoriser ou couper le prefetch anticipé.
  • Intégration via path deps + Riverpod ; cache HLS via adaptation locale d'une librairie de cache vidéo progressive.
  • Refactoring architecture cliente : séparation UI / SDKs métier / logique réseau, contrats d'API unifiés.

Pourquoi ce choix

Isoler la politique en Dart pur permet de la tester avec `dart test` sans widgets. La lib de cache progressive est une dépendance tierce adaptée, pas réécrite from scratch — l'apport principal est la politique de feed, pas le lecteur bas niveau.

Résultat mesuré

  • Politique de feed documentée et versionnée indépendamment de l'UI
  • Préchargement borné (forward steps + anti-rebond visibilité 180 ms)
  • Architecture cliente refactorée avec SDKs métier découplés