feat(learn): the assistant's button folded on Home too, the conversation at full height folding into it, and smaller fixes from the developer's list (ADR 0021, D64, D65)

- Home's assistant starts folded into its button at the lower left, as
  in the Library, where a field stood at its foot.
- The button has Material 3's floating action button shape (a rounded
  square) rather than a circle, its gradient ring kept.
- On a studyset below expanded windows it stands in one row with Add
  material and Study rather than above them.
- While studying, the ratings below the card make way while its field
  is open rather than standing under it.
- The conversation opens at the window's full height, its header above
  the list, so a drag on the header moves the sheet and a drag on the
  list scrolls it. Close ends the conversation; any other way out folds
  it into the button (ConversationDockCubit, above the router), its
  answer still coming, until any button opens it again or another
  conversation starts.
- An answer's Copy icon lines up with the answer's text.
- A sense's grammar notes run on after its glosses as one flowing text,
  so a short note such as "n" no longer takes a line of its own.
- A card's hints show their count in a grey badge beside the title, so
  it no longer reads as the hint's number.

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-02 00:42:14 +01:00
commit 138c4dd46e
Signed by: raisondetredev
GPG key ID: 07F6FCF405488B64

View file

@ -3,6 +3,7 @@ import 'package:halkyon_learn_flutter/src/core/content/rich_content.dart';
import 'package:halkyon_learn_flutter/src/core/router/route_paths.dart';
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/card/widget/card_extras.dart';
import 'package:halkyon_learn_flutter/src/feature/card/widget/composer/card_composer_screen.dart';
import 'package:halkyon_learn_flutter/src/feature/geo_map/data/geo_map_repository.dart';
import 'package:halkyon_learn_flutter/src/feature/geo_map/widget/region_map.dart';
@ -375,7 +376,15 @@ void main() {
await tester.tap(find.text('Hints'));
await tester.pumpAndSettle();
expect(find.text('Hints 2'), findsOneWidget);
// The count in a grey badge of its own, not read as the hint's place.
expect(find.text('Hints'), findsWidgets);
expect(
find.descendant(
of: find.byKey(hintsCountKey),
matching: find.text('2'),
),
findsOneWidget,
);
expect(find.text('1 / 2'), findsOneWidget);
expect(find.textContaining('a verb', findRichText: true), findsOneWidget);
await tester.tap(find.byTooltip('Next hint'));
@ -834,8 +843,11 @@ void main() {
await tester.tap(find.text('Show answer'));
await tester.pumpAndSettle();
expect(find.text('1.'), findsOneWidget);
expect(find.text('frog'), findsOneWidget);
expect(find.text('(zoology)'), findsOneWidget);
expect(find.textContaining('frog', findRichText: true), findsWidgets);
expect(
find.textContaining('(zoology) rain frog', findRichText: true),
findsOneWidget,
);
expect(find.byTooltip('usually written using kana alone'), findsOneWidget);
});