feat(train): a workout's page as Strava's, maps readable and in the app's language, routes opening near the person (ADR 0030, D63)
- A workout with a track: its map to the foot of the screen under a sheet with its name; once the sheet settles, the map fits the track anew, eased, into what is left free; pulled up, the round buttons over the map fold into an app bar whose chevron lowers the sheet again. From expanded windows on, the map beside the rest. The page stays in Home but opens over the shell, without the floating bar. - What the map's source sees moves behind a question mark. - The map's credit on the app's theme: flutter_map's, built on flutter/material, never saw it (material_ui's Theme is a class of its own) and drew the theme's text on white; map_tiles read that Theme too, and so never chose the instance's dark map (D50). - Places named in the app's language (name:<language>) where OpenFreeMap's styles ask for the English name. - The route planner's hint behind a question mark; a new route's map opens at zoom 14 where the phone was last known to be, else where the newest workout with a track started; its details beside the map from expanded windows on. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
This commit is contained in:
parent
30dd8c96eb
commit
3e90753b08
5 changed files with 1518 additions and 358 deletions
|
|
@ -94,6 +94,10 @@
|
|||
"workoutMapOwn": "Karte von deiner Instanz, {name}, aus OpenStreetMap: sie speichert nichts vom gezeigten Ausschnitt.",
|
||||
"workoutMapSourceAbout": "Was {name} speichert",
|
||||
"workoutMapUnavailable": "Die Karte kann gerade nicht geladen werden.",
|
||||
"workoutMapAbout": "Über die Karte",
|
||||
"workoutShowMap": "Karte zeigen",
|
||||
"mapCredits": "Kartennachweise",
|
||||
"routeHelpTitle": "Eine Route planen",
|
||||
"workoutNotFound": "Dieses Training gibt es nicht mehr.",
|
||||
|
||||
"recordHeartRate": "Herzfrequenz",
|
||||
|
|
|
|||
|
|
@ -120,6 +120,14 @@
|
|||
"workoutMapSourceAbout": "What {name} keeps",
|
||||
"@workoutMapSourceAbout": {"description": "A link to the map source's page about what it keeps.", "placeholders": {"name": {"type": "String", "example": "OpenFreeMap"}}},
|
||||
"workoutMapUnavailable": "The map can't be loaded now.",
|
||||
"workoutMapAbout": "About the map",
|
||||
"@workoutMapAbout": {"description": "Title of the explanation behind the question mark on a workout's page (D63): what the map's source sees."},
|
||||
"workoutShowMap": "Show the map",
|
||||
"@workoutShowMap": {"description": "Tooltip of the chevron that lowers a workout's sheet, the page pulled up, so that the map shows again (D63)."},
|
||||
"mapCredits": "Map credits",
|
||||
"@mapCredits": {"description": "Tooltip of the button over a map that shows whose map and data it is."},
|
||||
"routeHelpTitle": "Planning a route",
|
||||
"@routeHelpTitle": {"description": "Title of the explanation behind the question mark over the route planner's map (D63)."},
|
||||
"workoutNotFound": "This workout is gone.",
|
||||
|
||||
"recordHeartRate": "Heart rate",
|
||||
|
|
|
|||
|
|
@ -622,6 +622,30 @@ abstract class AppLocalizations {
|
|||
/// **'The map can\'t be loaded now.'**
|
||||
String get workoutMapUnavailable;
|
||||
|
||||
/// Title of the explanation behind the question mark on a workout's page (D63): what the map's source sees.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'About the map'**
|
||||
String get workoutMapAbout;
|
||||
|
||||
/// Tooltip of the chevron that lowers a workout's sheet, the page pulled up, so that the map shows again (D63).
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Show the map'**
|
||||
String get workoutShowMap;
|
||||
|
||||
/// Tooltip of the button over a map that shows whose map and data it is.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Map credits'**
|
||||
String get mapCredits;
|
||||
|
||||
/// Title of the explanation behind the question mark over the route planner's map (D63).
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Planning a route'**
|
||||
String get routeHelpTitle;
|
||||
|
||||
/// No description provided for @workoutNotFound.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
|
|
|
|||
|
|
@ -344,6 +344,18 @@ class AppLocalizationsDe extends AppLocalizations {
|
|||
String get workoutMapUnavailable =>
|
||||
'Die Karte kann gerade nicht geladen werden.';
|
||||
|
||||
@override
|
||||
String get workoutMapAbout => 'Über die Karte';
|
||||
|
||||
@override
|
||||
String get workoutShowMap => 'Karte zeigen';
|
||||
|
||||
@override
|
||||
String get mapCredits => 'Kartennachweise';
|
||||
|
||||
@override
|
||||
String get routeHelpTitle => 'Eine Route planen';
|
||||
|
||||
@override
|
||||
String get workoutNotFound => 'Dieses Training gibt es nicht mehr.';
|
||||
|
||||
|
|
|
|||
|
|
@ -341,6 +341,18 @@ class AppLocalizationsEn extends AppLocalizations {
|
|||
@override
|
||||
String get workoutMapUnavailable => 'The map can\'t be loaded now.';
|
||||
|
||||
@override
|
||||
String get workoutMapAbout => 'About the map';
|
||||
|
||||
@override
|
||||
String get workoutShowMap => 'Show the map';
|
||||
|
||||
@override
|
||||
String get mapCredits => 'Map credits';
|
||||
|
||||
@override
|
||||
String get routeHelpTitle => 'Planning a route';
|
||||
|
||||
@override
|
||||
String get workoutNotFound => 'This workout is gone.';
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue