From 4ab8b7052436b751860aca931c887ef3af222af6 Mon Sep 17 00:00:00 2001 From: Bene Date: Fri, 8 Nov 2024 22:59:47 +0100 Subject: [PATCH] simrbrief integration --- lib/screens/expectation_input_page.dart | 60 +++++++++++++++++++++++++ 1 file changed, 60 insertions(+) diff --git a/lib/screens/expectation_input_page.dart b/lib/screens/expectation_input_page.dart index 493c340..e2df6c7 100644 --- a/lib/screens/expectation_input_page.dart +++ b/lib/screens/expectation_input_page.dart @@ -3,6 +3,8 @@ import 'package:flutter/services.dart'; import 'comparison_page.dart'; import 'final_clearance_page.dart'; // Import final clearance page import '../utils/frequency_input_formatter.dart'; // Ensure this path is correct +import 'package:http/http.dart' as http; +import 'dart:convert'; class ExpectationInputPage extends StatefulWidget { final bool isDarkMode; @@ -30,6 +32,7 @@ class ExpectationInputPageState extends State { TextEditingController(); final TextEditingController _expectedFrequencyController = TextEditingController(); + final TextEditingController _simbriefIdController = TextEditingController(); // FocusNodes for each field final FocusNode _clearanceLimitFocusNode = FocusNode(); @@ -53,6 +56,42 @@ class ExpectationInputPageState extends State { super.dispose(); } + Future _fetchSimbriefData() async { + try { + final response = await http.get( + Uri.parse('https://www.simbrief.com/api/xml.fetcher.php?userid=${_simbriefIdController.text}&json=1'), + ); + + if (response.statusCode == 200) { + final data = json.decode(response.body); + + // Debug-Ausgabe + print('SimBrief API Response: ${response.body}'); + + // Extrahiere die komplette Route + String fullRoute = data['general']['route'] ?? ''; + // Hole nur den ersten Teil der Route (SID) + String sid = fullRoute.split(' ').first; + + setState(() { + _expectedClearanceLimitController.text = data['destination']['icao_code'] ?? ''; + _expectedRouteController.text = sid; + // Altitude und Frequency bleiben leer + _expectedAltitudeController.text = ''; + _expectedFrequencyController.text = ''; + }); + + ScaffoldMessenger.of(context).showSnackBar( + const SnackBar(content: Text('SimBrief Daten erfolgreich geladen')), + ); + } + } catch (e) { + ScaffoldMessenger.of(context).showSnackBar( + SnackBar(content: Text('Fehler beim Laden der SimBrief Daten: $e')), + ); + } + } + void _navigateToComparisonPage() { if (_formKey.currentState?.validate() ?? false) { Navigator.push( @@ -225,6 +264,27 @@ class ExpectationInputPageState extends State { textAlign: TextAlign.left, ), const SizedBox(height: 16), + Padding( + padding: const EdgeInsets.all(8.0), + child: Row( + children: [ + Expanded( + child: TextFormField( + controller: _simbriefIdController, + decoration: const InputDecoration( + labelText: 'SimBrief Pilot ID', + border: OutlineInputBorder(), + ), + ), + ), + const SizedBox(width: 10), + ElevatedButton( + onPressed: _fetchSimbriefData, + child: const Text('Lade SimBrief Daten'), + ), + ], + ), + ), Form( key: _formKey, child: Column(