c946d2df6d
Archivos nuevos:
display/lib/data/autopilot_state.dart
- ChangeNotifier con todos los datos del autopilot
- Simulación de velero en mar (heading drift / P-controller)
- API pública estable: engage(), disengage(), adjustSetpoint(), selectMode()
- Sprint 7: los internos se reemplazan por Modbus RTU, la API no cambia
display/lib/screens/cockpit/cockpit_screen.dart
- Pantalla principal: TopBar, ModeSelector, CompassRose, DataStrip,
HeadingAdjustBar, RudderIndicator, ENGAGE/DISENGAGE
- Logo con triple-tap para ciclar temas (StateWidget con Timer)
- Indicador DEMO visible cuando isConnected == false
- Engranaje → AppearanceSettingsScreen
display/lib/widgets/themed/engage_button.dart
- Botón verde con glow; dimmed cuando ya está engaged
display/lib/widgets/themed/heading_adjust_bar.dart
- Botones << < [SET 048.0°] > >>
- Deshabilitado cuando mode == STANDBY
display/lib/widgets/themed/status_chip.dart
- Indicador de punto + label para NMEA / GPS (ok / warn / off)
Modificado:
display/lib/main.dart
- MultiProvider: agrega AutopilotState al árbol de providers
- Ruta inicial: CockpitScreen.routeName ('/') en lugar de Appearance
AR_electronics — AR-Autopilot Project
48 lines
1.4 KiB
Dart
48 lines
1.4 KiB
Dart
import 'package:flutter/material.dart';
|
|
import 'package:provider/provider.dart';
|
|
|
|
import 'data/autopilot_state.dart';
|
|
import 'theme/theme_provider.dart';
|
|
import 'screens/cockpit/cockpit_screen.dart';
|
|
import 'screens/settings/appearance_settings.dart';
|
|
|
|
Future<void> main() async {
|
|
WidgetsFlutterBinding.ensureInitialized();
|
|
final themeProvider = await AutopilotThemeProvider.load();
|
|
runApp(
|
|
MultiProvider(
|
|
providers: [
|
|
ChangeNotifierProvider<AutopilotThemeProvider>.value(
|
|
value: themeProvider,
|
|
),
|
|
// AutopilotState drives the cockpit UI.
|
|
// Sprint 4: internal demo timer (vessel simulation).
|
|
// Sprint 7: replace with AutopilotStateModbus or wire Modbus RTU here.
|
|
ChangeNotifierProvider<AutopilotState>(
|
|
create: (_) => AutopilotState(),
|
|
),
|
|
],
|
|
child: const ArAutopilotApp(),
|
|
),
|
|
);
|
|
}
|
|
|
|
class ArAutopilotApp extends StatelessWidget {
|
|
const ArAutopilotApp({super.key});
|
|
|
|
@override
|
|
Widget build(BuildContext context) {
|
|
return MaterialApp(
|
|
title: 'AR-Autopilot',
|
|
debugShowCheckedModeBanner: false,
|
|
theme: ThemeData(useMaterial3: true),
|
|
initialRoute: CockpitScreen.routeName,
|
|
routes: {
|
|
CockpitScreen.routeName: (_) => const CockpitScreen(),
|
|
AppearanceSettingsScreen.routeName: (_) =>
|
|
const AppearanceSettingsScreen(),
|
|
},
|
|
);
|
|
}
|
|
}
|