Show distance to home as a fourth field in the fly-mode details pill
Adds computeDistanceToHomeM() (mission_stats.dart) alongside the existing rubber-band-target helper, wired through MissionFooterBar -> BottomStatsBar the same way flyMissionStatus already is. Only appears once a home point is known, as the last field after waypoint/distance/ duration. Generalized HomePointIcon to take an optional strokeColor: the map marker keeps its dark-fill-plus-white-outline look, while the details pill uses a plain white fill (strokeColor: null) to match the existing monochrome flag/ruler/clock icons instead of looking like a dropped-in map pin.
This commit is contained in:
@@ -1,27 +1,44 @@
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
/// Homepoint-Marker auf der Karte im Fly-Modus (Doku: "den auf der Drohne
|
||||
/// gelockten Homepoint abfragen ... benutze dieses Icon"), Pentagon-Haus-
|
||||
/// Form aus design/homepoint-pentagon.svg - nativ als [CustomPainter] statt
|
||||
/// als SVG-Asset nachgebaut (Format bewusst geaendert, dasselbe Muster wie
|
||||
/// DroneMarkerIcon/PaperPlaneIcon: ein einzelnes Polygon lohnt keine
|
||||
/// zusaetzliche SVG-Renderer-Abhaengigkeit).
|
||||
/// Homepoint-Pentagon-Haus-Form aus design/homepoint-pentagon.svg - nativ
|
||||
/// als [CustomPainter] statt als SVG-Asset nachgebaut (Format bewusst
|
||||
/// geaendert, dasselbe Muster wie DroneMarkerIcon/PaperPlaneIcon: ein
|
||||
/// einzelnes Polygon lohnt keine zusaetzliche SVG-Renderer-Abhaengigkeit).
|
||||
///
|
||||
/// Zwei Anwendungsfaelle mit unterschiedlichem Stil teilen sich dieselbe
|
||||
/// Geometrie: als Kartenmarker im Fly-Modus (Doku: "den auf der Drohne
|
||||
/// gelockten Homepoint abfragen ... benutze dieses Icon") mit dunkler
|
||||
/// Fuellung + weissem Rand wie die anderen Kartenmarker, und als schlichtes
|
||||
/// einfarbiges Inline-Icon in der Details-Pille (Doku: "gleiche Pentagon
|
||||
/// Form, aber im Style von den anderen icons") ohne Rand, passend zu den
|
||||
/// dortigen Material-Icons (flag/straighten/access_time). [strokeColor]
|
||||
/// null waehlt Letzteres.
|
||||
class HomePointIcon extends StatelessWidget {
|
||||
const HomePointIcon({super.key, this.size = 32});
|
||||
const HomePointIcon({
|
||||
super.key,
|
||||
this.size = 32,
|
||||
this.color = const Color(0xFF161616),
|
||||
this.strokeColor = Colors.white,
|
||||
});
|
||||
|
||||
final double size;
|
||||
final Color color;
|
||||
final Color? strokeColor;
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return CustomPaint(
|
||||
size: Size.square(size),
|
||||
painter: const _HomePointPainter(),
|
||||
painter: _HomePointPainter(fill: color, stroke: strokeColor),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
class _HomePointPainter extends CustomPainter {
|
||||
const _HomePointPainter();
|
||||
const _HomePointPainter({required this.fill, required this.stroke});
|
||||
|
||||
final Color fill;
|
||||
final Color? stroke;
|
||||
|
||||
// 1:1 aus design/homepoint-pentagon.svg uebernommene Koordinaten (viewBox
|
||||
// 0 0 72 72): Haus-Silhouette (Fuenfeck) mit spitzem Dach.
|
||||
@@ -33,7 +50,6 @@ class _HomePointPainter extends CustomPainter {
|
||||
Offset(52, 34),
|
||||
Offset(52, 52),
|
||||
];
|
||||
static const _fill = Color(0xFF161616);
|
||||
static const _strokeWidth = 3.0;
|
||||
|
||||
@override
|
||||
@@ -47,17 +63,21 @@ class _HomePointPainter extends CustomPainter {
|
||||
}
|
||||
path.close();
|
||||
|
||||
canvas.drawPath(path, Paint()..color = _fill);
|
||||
canvas.drawPath(
|
||||
path,
|
||||
Paint()
|
||||
..color = Colors.white
|
||||
..style = PaintingStyle.stroke
|
||||
..strokeWidth = _strokeWidth * scale
|
||||
..strokeJoin = StrokeJoin.round,
|
||||
);
|
||||
canvas.drawPath(path, Paint()..color = fill);
|
||||
final strokeColor = stroke;
|
||||
if (strokeColor != null) {
|
||||
canvas.drawPath(
|
||||
path,
|
||||
Paint()
|
||||
..color = strokeColor
|
||||
..style = PaintingStyle.stroke
|
||||
..strokeWidth = _strokeWidth * scale
|
||||
..strokeJoin = StrokeJoin.round,
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@override
|
||||
bool shouldRepaint(covariant _HomePointPainter oldDelegate) => false;
|
||||
bool shouldRepaint(covariant _HomePointPainter oldDelegate) =>
|
||||
oldDelegate.fill != fill || oldDelegate.stroke != stroke;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user