From 5a73da898b26bee8c7997e11c4d39adc747b1cd9 Mon Sep 17 00:00:00 2001 From: Julien Martin Date: Mon, 5 Oct 2026 12:21:25 +0200 Subject: [PATCH] fix(#173): tri stable des bulles entre parents MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Même ordre API (statut puis modifie_le) avec départage par id, appliqué au chargement et après chaque réponse. Co-authored-by: Cursor --- .../lib/widgets/quotidien/cartes_feed.dart | 33 +++++++++++++++++-- 1 file changed, 30 insertions(+), 3 deletions(-) diff --git a/frontend/lib/widgets/quotidien/cartes_feed.dart b/frontend/lib/widgets/quotidien/cartes_feed.dart index 91158e0..a4e0cea 100644 --- a/frontend/lib/widgets/quotidien/cartes_feed.dart +++ b/frontend/lib/widgets/quotidien/cartes_feed.dart @@ -76,6 +76,33 @@ class _CartesFeedState extends State { } } + /// Aligné sur le tri API : refusées → ouvertes → traitées, puis + /// `modifie_le` DESC, `id` en départage (ordre stable entre parents). + static List _trier(List items) { + int rang(CarteStatut s) { + switch (s) { + case CarteStatut.refusee: + return 0; + case CarteStatut.ouverte: + return 1; + case CarteStatut.traitee: + return 2; + } + } + + final out = List.from(items); + out.sort((a, b) { + final byStatut = rang(a.statut).compareTo(rang(b.statut)); + if (byStatut != 0) return byStatut; + final am = a.modifieLe?.millisecondsSinceEpoch ?? 0; + final bm = b.modifieLe?.millisecondsSinceEpoch ?? 0; + final byModif = bm.compareTo(am); // DESC + if (byModif != 0) return byModif; + return a.id.compareTo(b.id); + }); + return out; + } + Future _load() async { setState(() { _loading = true; @@ -87,7 +114,7 @@ class _CartesFeedState extends State { ); if (!mounted) return; setState(() { - _items = items; + _items = _trier(items); _loading = false; }); WidgetsBinding.instance.addPostFrameCallback((_) => _syncScrollFades()); @@ -114,9 +141,9 @@ class _CartesFeedState extends State { ); if (!mounted) return; setState(() { - _items = [ + _items = _trier([ for (final c in _items) if (c.id == updated.id) updated else c, - ]; + ]); _busyCardId = null; }); } catch (e) {