Give the Fly App every remaining GO 4 flight mode and the missing settings
Intelligent modes: Point of Interest (orbit on the map, live radius and speed), Follow Me (follows the phone), QuickShots on a boxed subject, Course Lock / Home Lock, Tripod and Cinematic, a Free hyperlapse, and Waypoints 2.0 for V2-only aircraft. ActiveTrack gains Spotlight Pro and Circle. Every mode has a first-use tutorial and stops from the rail. Waypoints can resume an interrupted mission, change cruise speed in flight and check terrain clearance (Open-Meteo, on tap). Settings: units, C1/C2 actions, dual-operator master/slave, HDMI/SDI output, a link spectrum chart, Wi-Fi name and password, aircraft name, video cache, battery warning history and pairing, non-smart cell voltages. Calibration: compass interference meter, per-IMU calibration, lens infinity focus and a first-manual-focus prompt. Also an RTK chip, gimbal movement presets and motor tuning, Precision Takeoff gated on the flight controller, and the precise GEO database's server version. Built and unit/widget-tested only; nothing has flown yet. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
91ca150a35
commit
636da1ac2c
57 files changed
+5363
-87
No files matched your search
@@ -1,10 +1,13 @@
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
import '../../../fly/fly_prefs.dart';
|
||||
import '../../../fly/hud_features.dart';
|
||||
import '../../../fly/state/aircraft_state.dart';
|
||||
import '../../../fly/units.dart';
|
||||
import '../hud_kit.dart';
|
||||
|
||||
/// The bottom telemetry strip (plan P2): H · D · VS (with arrow) · HS · VPS.
|
||||
/// The bottom telemetry strip (plan P2): H · D · VS (with arrow) · HS · VPS,
|
||||
/// in metres or feet as Settings → General → Units says.
|
||||
class TelemetryStrip extends StatelessWidget {
|
||||
const TelemetryStrip({super.key, required this.aircraft});
|
||||
|
||||
@@ -13,21 +16,25 @@ class TelemetryStrip extends StatelessWidget {
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return ListenableBuilder(
|
||||
listenable: aircraft,
|
||||
listenable: Listenable.merge(<Listenable>[aircraft, FlyPrefs.units]),
|
||||
builder: (BuildContext context, _) {
|
||||
final AircraftState a = aircraft;
|
||||
final UnitSystem u = FlyPrefs.units.value;
|
||||
final double? vs = a.verticalSpeed;
|
||||
// Under 0.1 m/s is hover noise; no arrow for it.
|
||||
final int dir = vs == null || vs.abs() < 0.1 ? 0 : vs.sign.toInt();
|
||||
double? len(double? m) => m == null ? null : Units.lengthValue(m, u);
|
||||
double? spd(double? ms) => ms == null ? null : Units.speedValue(ms, u);
|
||||
final String l = Units.lengthUnit(u), s = Units.speedUnit(u);
|
||||
return GlassPill(
|
||||
height: 40,
|
||||
padding: const EdgeInsets.symmetric(horizontal: 12),
|
||||
child: Row(mainAxisSize: MainAxisSize.min, children: <Widget>[
|
||||
_Field('H', fmtNum(a.altitude), 'm'),
|
||||
_Field('D', fmtNum(a.homeDistance, digits: 0), 'm'),
|
||||
_Field('VS', fmtNum(vs?.abs()), 'm/s', arrow: dir),
|
||||
_Field('HS', fmtNum(a.horizontalSpeed), 'm/s'),
|
||||
Requires(HudFeatures.vpsReadout, child: _Field('VPS', fmtNum(a.vpsHeight), 'm')),
|
||||
_Field('H', fmtNum(len(a.altitude)), l),
|
||||
_Field('D', fmtNum(len(a.homeDistance), digits: 0), l),
|
||||
_Field('VS', fmtNum(spd(vs?.abs())), s, arrow: dir),
|
||||
_Field('HS', fmtNum(spd(a.horizontalSpeed)), s),
|
||||
Requires(HudFeatures.vpsReadout, child: _Field('VPS', fmtNum(len(a.vpsHeight)), l)),
|
||||
]),
|
||||
);
|
||||
},
|
||||
|
||||
Reference in new issue
Block a user