feat(todo): a task's sheet partway up and its parts in rounded boxes, as Todoist's

The developer's review of 3 Nov 2026 (ADR 0033, D24): on a phone the sheet
opens as high as its content, at most 65 % of the window, the list above it
in view, and is dragged up to the whole window or down to close; its title,
description, date and reminders each in a rounded box, its priority, labels,
deadline and project as a row of chips (named "Priority", "Labels",
"Deadline" while unset), and its sub-tasks in a box ending in Add sub-task.
Where sheets are dialogs, and in the pane beside the list, the same parts.
Todo keeps no comments, so the sheet has no comment field.

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-03 21:53:04 +01:00
commit 140a283d0e
Signed by: raisondetredev
GPG key ID: 07F6FCF405488B64

View file

@ -1877,6 +1877,29 @@ void main() {
);
});
testWidgets("a task's sheet opens partway up, as Todoist's, its parts in "
'rounded boxes and its priority, labels and deadline as chips; '
"dragged up, it fills the window (the developer's review, 3 Nov "
'2026)', (tester) async {
await start(tester, usedBefore: true);
await seed(tester, TaskContent(title: 'Pack', projectId: inbox()));
await goTab(tester, 'Inbox');
await tester.tap(find.text('Pack'));
await tester.pumpAndSettle();
final sheet = find.byType(DraggableScrollableSheet);
expect(tester.getRect(sheet).top, greaterThan(900 * 0.3));
for (final chip in ['Priority', 'Labels', 'Deadline']) {
expect(find.widgetWithText(ActionChip, chip), findsOneWidget);
}
expect(find.text('Add sub-task'), findsOneWidget);
await tester.drag(find.byKey(taskSheetHandleKey), const Offset(0, -700));
await tester.pumpAndSettle();
expect(tester.getRect(sheet).top, lessThan(80));
});
testWidgets("a task's sheet sets its priority, adds a sub-task the row "
'counts, and deletes it with its sub-tasks after asking', (
tester,
@ -1888,7 +1911,7 @@ void main() {
await tester.tap(find.text('Pack'));
await tester.pumpAndSettle();
await tester.tap(find.text('No priority'));
await tester.tap(find.widgetWithText(ActionChip, 'Priority'));
await tester.pumpAndSettle();
await tester.tap(find.text('Priority 1'));
await tester.pumpAndSettle();