fix(app): studyset tabs built as they scroll, and a Reorder mode for flashcards

A studyset of 1,200 flashcards froze the window for seconds on opening
(7.4 s in a debug test; a release build is faster but still grows with
every card), long enough for the desktop to offer to kill the app: the
tabs held each list as one child of a scrolling view, shrink-wrapped, so
every row was built and laid out at once, and again on every change.

The tabs are now CustomScrollViews holding each list's slivers, built as
they scroll into view (0.07 s for the same 1,200 cards). What a list says
in place of its rows sits in SliverCentered.

On the desktop, Flutter's default drag handle lay over each card's "…",
so a press there began a drag rather than opening the options. Cards now
move in a Reorder mode, as paths do: Reorder beside the tabs (with two
cards or more, all showing), a grip in place of each card's options,
Done to end it. ReorderToggle and liftWhileDragged are shared with the
paths.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01MMm7usAo6q9ZZRoPkWjoxi
Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
This commit is contained in:
Tizian 「ティツィアーン」 2026-10-08 18:22:40 +02:00
commit bb23ca2478
Signed by: raisondetredev
GPG key ID: 07F6FCF405488B64

View file

@ -1720,6 +1720,12 @@ abstract class AppLocalizations {
/// **'Reorder paths'**
String get studysetReorderPaths;
/// No description provided for @studysetReorderCards.
///
/// In en, this message translates to:
/// **'Reorder flashcards'**
String get studysetReorderCards;
/// No description provided for @studysetReorderDone.
///
/// In en, this message translates to: