feat(learn): a split of Topics, Introduction and Bibliography beside the material

As Tomorrow University's challenges have it (the developer's decisions of
10 Nov 2026): beside a studyset's material, one at a time, its topics,
its introduction (the description, whole; left out where there is none)
and its bibliography, read and changed in place. In the side column from
expanded windows on, in the topics' sheet below; it opens on Topics, at
every level. The description no longer stands above the material, nor
the bibliography's button at the foot of the topics. The pill between
the material's parts becomes PillSwitch, shared by both.

Whats-New: A studyset's topics, introduction and bibliography now share one panel beside its material, a tap apart.
Whats-New-De: Themen, Einführung und Literatur eines Lernsets teilen sich jetzt ein Feld neben dem Material, einen Tipp voneinander entfernt.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
This commit is contained in:
Tizian 「ティツィアーン」 2026-11-10 20:02:42 +01:00
commit bed39dc2a2
Signed by: raisondetredev
GPG key ID: 07F6FCF405488B64

View file

@ -6,6 +6,7 @@ import 'package:halkyon_learn_flutter/src/feature/card/data/card_repository.dart
import 'package:halkyon_learn_flutter/src/feature/card/model/card_content.dart';
import 'package:halkyon_learn_flutter/src/feature/studyset/data/studyset_payload.dart';
import 'package:halkyon_learn_flutter/src/feature/studyset/model/studyset_content.dart';
import 'package:halkyon_learn_flutter/src/feature/studyset/widget/studyset_side_panel.dart';
import 'package:halkyon_learn_flutter/src/feature/tag/data/tag_repository.dart';
import 'package:material_ui/material_ui.dart';
@ -138,6 +139,14 @@ void main() {
studyButtonBackFirstKey: true,
});
await showApp(tester, RoutePaths.studyset('lesson'));
// The description is the split's Introduction (decided 10 Nov 2026).
await tester.tap(
find.descendant(
of: find.byKey(StudysetSidePanel.switchKey),
matching: find.text('Introduction'),
),
);
await tester.pumpAndSettle();
await tester.tap(find.widgetWithText(FilledButton, 'Verbs'));
await tester.pumpAndSettle();
@ -150,6 +159,14 @@ void main() {
testWidgets('a button whose studyset is gone says so', (tester) async {
describedWithButton({studyButtonStudysetKey: 'gone'});
await showApp(tester, RoutePaths.studyset('lesson'));
// The description is the split's Introduction (decided 10 Nov 2026).
await tester.tap(
find.descendant(
of: find.byKey(StudysetSidePanel.switchKey),
matching: find.text('Introduction'),
),
);
await tester.pumpAndSettle();
await tester.tap(find.widgetWithText(FilledButton, 'Study'));
await tester.pump();