From 0d3dba2482610590d7f56ef35826399e4c14f490 Mon Sep 17 00:00:00 2001 From: Constantin Leue <77660791+Consti3D@users.noreply.github.com> Date: Fri, 7 Aug 2026 22:06:23 +0200 Subject: [PATCH] Unify header pill/button height to 38px, matching the HTML prototype Measured the prototype screenshot pixel-for-pixel: content pills take up ~79% of the header's total height, matching its own CSS (height:38px, topBarWrap padding:5px 10px -> 48px total). The Flutter port had drifted to 34px for HeaderWindPill, MapSearchControls, and NavIconButton, while FlightModePill was left at the original 38px - so Fly mode looked inconsistent against itself, and both modes wasted more header height as margin than the prototype does. Bringing all four back to a shared 38px fixes both. --- app/lib/ui/widgets/drone_follow_icon.dart | 2 +- app/lib/ui/widgets/header_wind_pill.dart | 8 ++++++-- app/lib/ui/widgets/map_search_controls.dart | 7 +++++-- app/lib/ui/widgets/nav_icon_button.dart | 8 ++++++-- 4 files changed, 18 insertions(+), 7 deletions(-) diff --git a/app/lib/ui/widgets/drone_follow_icon.dart b/app/lib/ui/widgets/drone_follow_icon.dart index 4b9e843..9415aa5 100644 --- a/app/lib/ui/widgets/drone_follow_icon.dart +++ b/app/lib/ui/widgets/drone_follow_icon.dart @@ -13,7 +13,7 @@ class DroneFollowIcon extends StatelessWidget { @override Widget build(BuildContext context) { - // NavIconButton zwingt seinem Kind straffe 34x34-Constraints auf - ohne + // NavIconButton zwingt seinem Kind straffe 38x38-Constraints auf - ohne // Center/SizedBox wuerde CustomPaint sein size-Argument ignorieren und // auf die volle Knopfgroesse aufgeblasen (RenderCustomPaint hat anders // als Icon kein eingebautes Center, das die Constraints fuer sein Kind diff --git a/app/lib/ui/widgets/header_wind_pill.dart b/app/lib/ui/widgets/header_wind_pill.dart index 8cd9faf..17be0a8 100644 --- a/app/lib/ui/widgets/header_wind_pill.dart +++ b/app/lib/ui/widgets/header_wind_pill.dart @@ -19,13 +19,17 @@ class HeaderWindPill extends ConsumerWidget { return GestureDetector( onTap: () => ref.read(headerWindProvider.notifier).toggleShowPerWaypoint(), child: Container( - height: 34, + // 38 statt vorher 34 (Nutzerwunsch: Kopfleisten-Pillen/-Buttons + // einheitlich auf die im HTML-Demonstrator vermessene Hoehe bringen, + // siehe TopModeBar-Klassendoku) - deckungsgleich mit FlightModePill, + // das schon immer 38 nutzte. + height: 38, padding: const EdgeInsets.symmetric(horizontal: 10), decoration: BoxDecoration( color: active ? const Color(0xFF4D9DFF).withValues(alpha: 0.32) : Colors.black.withValues(alpha: 0.55), - borderRadius: BorderRadius.circular(17), + borderRadius: BorderRadius.circular(19), border: Border.all( color: active ? const Color(0xFF4D9DFF) diff --git a/app/lib/ui/widgets/map_search_controls.dart b/app/lib/ui/widgets/map_search_controls.dart index c374160..40cfb51 100644 --- a/app/lib/ui/widgets/map_search_controls.dart +++ b/app/lib/ui/widgets/map_search_controls.dart @@ -89,11 +89,14 @@ class _MapSearchControlsState extends ConsumerState { children: [ Expanded( child: Container( - height: 34, + // 38 statt vorher 34, deckungsgleich mit HeaderWindPill/ + // FlightModePill/NavIconButton (Nutzerwunsch: einheitliche + // Kopfleisten-Hoehe wie im HTML-Demonstrator vermessen). + height: 38, padding: const EdgeInsets.only(left: 12, right: 4), decoration: BoxDecoration( color: Colors.black.withValues(alpha: 0.55), - borderRadius: BorderRadius.circular(17), + borderRadius: BorderRadius.circular(19), ), child: Row( children: [ diff --git a/app/lib/ui/widgets/nav_icon_button.dart b/app/lib/ui/widgets/nav_icon_button.dart index 61c80c6..980869f 100644 --- a/app/lib/ui/widgets/nav_icon_button.dart +++ b/app/lib/ui/widgets/nav_icon_button.dart @@ -28,8 +28,12 @@ class NavIconButton extends StatelessWidget { return GestureDetector( onTap: onTap, child: Container( - width: 34, - height: 34, + // 38 statt vorher 34, deckungsgleich mit HeaderWindPill/ + // MapSearchControls/FlightModePill (Nutzerwunsch: einheitliche + // Kopfleisten-Hoehe wie im HTML-Demonstrator vermessen: #homeBtn/ + // #fitBtn nutzen dort ebenfalls width/height:38px). + width: 38, + height: 38, decoration: BoxDecoration( shape: BoxShape.circle, color: Colors.black.withValues(alpha: 0.55),