feat(train): the settings' explanations behind a question mark (ADR 0030, D63)
What a switch or a section explains, rather than what is the person's own, is one tap away: `HelpTitle`, a tile's title with halkyon_ui's `HelpButton` beside it, in place of the explaining subtitles of Moving more's reminders and suggestions, the music's playlists and smaller copies, and the Loop's detection, firmware check and firmware through the instance. Health Connect's short hints stay (they name what each switch does, and its "taken back" state takes their place), as do its rationale, the Loop's warnings before an update or a reset and the settings' one-line hints. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
This commit is contained in:
parent
b975659690
commit
b7db078c8e
3 changed files with 123 additions and 19 deletions
|
|
@ -963,6 +963,25 @@ void main() {
|
|||
await tester.pumpAndSettle();
|
||||
}
|
||||
|
||||
testWidgets("the switches' explanations wait behind their question marks "
|
||||
'(D63)', (tester) async {
|
||||
await openMovement(tester);
|
||||
const hint =
|
||||
'When the phone counted hardly a step for a while; never while '
|
||||
'recording or in a car.';
|
||||
expect(find.text(hint), findsNothing);
|
||||
|
||||
await tester.tap(
|
||||
find.descendant(
|
||||
of: find.widgetWithText(SwitchListTile, 'Remind me to move'),
|
||||
matching: find.byType(HelpButton),
|
||||
),
|
||||
);
|
||||
await tester.pumpAndSettle();
|
||||
expect(find.text(hint), findsOneWidget);
|
||||
expect(platform.configured, [null], reason: 'nothing switched');
|
||||
});
|
||||
|
||||
testWidgets('reminders turned on ask for the permissions, and the job '
|
||||
'gets the settings and the words, each change again', (tester) async {
|
||||
await openMovement(tester);
|
||||
|
|
|
|||
|
|
@ -0,0 +1,45 @@
|
|||
import 'package:flutter_test/flutter_test.dart';
|
||||
import 'package:halkyon_train_flutter/src/core/widget/help_title.dart';
|
||||
import 'package:halkyon_ui/halkyon_ui.dart';
|
||||
import 'package:material_ui/material_ui.dart';
|
||||
|
||||
void main() {
|
||||
testWidgets("a setting's title keeps its explanation behind the question "
|
||||
'mark, and a tap on the title still reaches the tile', (tester) async {
|
||||
var on = false;
|
||||
await tester.pumpWidget(
|
||||
MaterialApp(
|
||||
localizationsDelegates: HalkyonUiLocalizations.localizationsDelegates,
|
||||
home: Scaffold(
|
||||
body: StatefulBuilder(
|
||||
builder: (context, setState) => SwitchListTile(
|
||||
title: const HelpTitle(
|
||||
'Smaller copies',
|
||||
help: 'Lossless files kept as Opus.',
|
||||
),
|
||||
value: on,
|
||||
onChanged: (value) => setState(() => on = value),
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
);
|
||||
expect(find.text('Lossless files kept as Opus.'), findsNothing);
|
||||
|
||||
await tester.tap(find.text('Smaller copies'));
|
||||
await tester.pump();
|
||||
expect(on, isTrue);
|
||||
|
||||
await tester.tap(find.byType(HelpButton));
|
||||
await tester.pumpAndSettle();
|
||||
expect(find.text('Lossless files kept as Opus.'), findsOneWidget);
|
||||
expect(
|
||||
find.descendant(
|
||||
of: find.byType(AlertDialog),
|
||||
matching: find.text('Smaller copies'),
|
||||
),
|
||||
findsOneWidget,
|
||||
);
|
||||
expect(on, isTrue, reason: 'the question mark leaves the switch alone');
|
||||
});
|
||||
}
|
||||
|
|
@ -8,6 +8,7 @@ import 'package:halkyon_train_flutter/src/feature/music/data/music_downloads.dar
|
|||
import 'package:halkyon_train_flutter/src/feature/music/data/music_library.dart';
|
||||
import 'package:halkyon_train_flutter/src/feature/music/data/music_store.dart';
|
||||
import 'package:halkyon_train_flutter/src/feature/music/widget/music_screen.dart';
|
||||
import 'package:halkyon_ui/halkyon_ui.dart';
|
||||
import 'package:material_ui/material_ui.dart';
|
||||
|
||||
import '../../support/fake_jellyfin.dart';
|
||||
|
|
@ -34,7 +35,10 @@ void main() {
|
|||
);
|
||||
await tester.pumpWidget(
|
||||
MaterialApp(
|
||||
localizationsDelegates: AppLocalizations.localizationsDelegates,
|
||||
localizationsDelegates: const [
|
||||
...AppLocalizations.localizationsDelegates,
|
||||
HalkyonUiLocalizations.delegate,
|
||||
],
|
||||
supportedLocales: AppLocalizations.supportedLocales,
|
||||
locale: const Locale('en'),
|
||||
home: BlocProvider(
|
||||
|
|
@ -112,7 +116,10 @@ void main() {
|
|||
addTearDown(kept.dispose);
|
||||
await tester.pumpWidget(
|
||||
MaterialApp(
|
||||
localizationsDelegates: AppLocalizations.localizationsDelegates,
|
||||
localizationsDelegates: const [
|
||||
...AppLocalizations.localizationsDelegates,
|
||||
HalkyonUiLocalizations.delegate,
|
||||
],
|
||||
supportedLocales: AppLocalizations.supportedLocales,
|
||||
locale: const Locale('en'),
|
||||
home: BlocProvider(
|
||||
|
|
@ -217,7 +224,10 @@ void main() {
|
|||
);
|
||||
await tester.pumpWidget(
|
||||
MaterialApp(
|
||||
localizationsDelegates: AppLocalizations.localizationsDelegates,
|
||||
localizationsDelegates: const [
|
||||
...AppLocalizations.localizationsDelegates,
|
||||
HalkyonUiLocalizations.delegate,
|
||||
],
|
||||
supportedLocales: AppLocalizations.supportedLocales,
|
||||
locale: const Locale('en'),
|
||||
home: BlocProvider(
|
||||
|
|
|
|||
Loading…
Reference in a new issue