feat(todo): reminders on the device, Upcoming's week strip, the task pane and search (ADR 0033, D2, D5, D8)

A task with a time takes reminders, minutes before it, in its sealed
payload; each device plans the coming ones whenever the tasks change and
schedules them with the system through flutter_local_notifications
(Android, iOS, macOS, Windows; on Linux the running app shows them), at
the minute where Android allows exact alarms. Notifying is asked for
when a task first gets a reminder; signing out or switching person
cancels them. Upcoming gets its week strip: the month opening
Material's calendar, the weeks before and after, a dot under each day
with tasks; a day picked scrolls the agenda to it, and scrolling moves
the strip along. From expanded windows on, a task opens in a pane
beside the list rather than in a dialog. Search, from every tab's app
bar, finds projects by name and tasks by every word typed, in their
title, description or labels, whatever the case and accents, on the
device alone.

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-01 12:16:19 +01:00
commit 666e8dbcbb
Signed by: raisondetredev
GPG key ID: 07F6FCF405488B64

View file

@ -783,6 +783,114 @@ abstract class AppLocalizations {
/// In en, this message translates to:
/// **'{count, plural, =1{After once} other{After {count} times}}'**
String repeatEndsAfter(int count);
/// No description provided for @remindersTitle.
///
/// In en, this message translates to:
/// **'Reminders'**
String get remindersTitle;
/// No description provided for @remindersNone.
///
/// In en, this message translates to:
/// **'No reminders'**
String get remindersNone;
/// No description provided for @reminderAtTime.
///
/// In en, this message translates to:
/// **'At its time'**
String get reminderAtTime;
/// No description provided for @reminderMinutesBefore.
///
/// In en, this message translates to:
/// **'{count, plural, =1{1 minute before} other{{count} minutes before}}'**
String reminderMinutesBefore(int count);
/// No description provided for @reminderHoursBefore.
///
/// In en, this message translates to:
/// **'{count, plural, =1{1 hour before} other{{count} hours before}}'**
String reminderHoursBefore(int count);
/// No description provided for @reminderDaysBefore.
///
/// In en, this message translates to:
/// **'{count, plural, =1{1 day before} other{{count} days before}}'**
String reminderDaysBefore(int count);
/// No description provided for @reminderDue.
///
/// In en, this message translates to:
/// **'Due at {time}'**
String reminderDue(String time);
/// No description provided for @remindersChannel.
///
/// In en, this message translates to:
/// **'Task reminders'**
String get remindersChannel;
/// No description provided for @remindersNotAllowed.
///
/// In en, this message translates to:
/// **'Notifications are off for Halkyon Todo: reminders show once you allow them in the system\'s settings.'**
String get remindersNotAllowed;
/// No description provided for @remindersOnThisDevice.
///
/// In en, this message translates to:
/// **'Reminders come on each of your devices that opens your tasks.'**
String get remindersOnThisDevice;
/// No description provided for @weekPrevious.
///
/// In en, this message translates to:
/// **'Previous week'**
String get weekPrevious;
/// No description provided for @weekNext.
///
/// In en, this message translates to:
/// **'Following week'**
String get weekNext;
/// No description provided for @searchTitle.
///
/// In en, this message translates to:
/// **'Search'**
String get searchTitle;
/// No description provided for @searchHint.
///
/// In en, this message translates to:
/// **'Search tasks and projects'**
String get searchHint;
/// No description provided for @searchEmpty.
///
/// In en, this message translates to:
/// **'Find a task by the words in its title, its description or its labels. Search runs on this device: your instance can\'t read your tasks.'**
String get searchEmpty;
/// No description provided for @searchNone.
///
/// In en, this message translates to:
/// **'Nothing found for “{query}”.'**
String searchNone(String query);
/// No description provided for @searchProjects.
///
/// In en, this message translates to:
/// **'Projects'**
String get searchProjects;
/// No description provided for @searchTasks.
///
/// In en, this message translates to:
/// **'Tasks'**
String get searchTasks;
}
class _AppLocalizationsDelegate