This commit is contained in:
2024-10-19 14:17:37 +02:00
parent 9f98189983
commit ec76a028cb
53 changed files with 495 additions and 607 deletions

View File

@@ -12,7 +12,8 @@ class ComparisonPage extends StatefulWidget {
final bool isDarkMode;
final Function toggleDarkMode;
const ComparisonPage({super.key,
const ComparisonPage({
super.key,
required this.expectedClearanceLimit,
required this.expectedRoute,
required this.expectedAltitude,
@@ -159,130 +160,130 @@ class ComparisonPageState extends State<ComparisonPage> {
);
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: const Text('IFR Buddy'), // Global title
actions: [
IconButton(
icon: Icon(widget.isDarkMode ? Icons.dark_mode : Icons.light_mode),
onPressed: () {
widget.toggleDarkMode();
},
),
],
),
body: Padding(
padding: const EdgeInsets.all(16.0),
child: ListView(
children: [
// Explanation Text Card
const Card(
elevation: 2,
child: Padding(
padding: EdgeInsets.all(16.0),
child: Text(
'Use this Page while receiving your clearance. The arrow button copies the excpected value. Same if left empty.',
style: TextStyle(fontSize: 16),
textAlign: TextAlign.center,
),
),
),
const SizedBox(height: 16),
// Main content side-by-side
Row(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
// Expected Clearance Column
Expanded(
child: Card(
elevation: 2,
child: Padding(
padding: const EdgeInsets.all(16.0),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
const Text(
'Expected',
style: TextStyle(fontSize: 22, fontWeight: FontWeight.bold),
),
const Divider(),
buildExpectedClearanceField('Clearance Limit', widget.expectedClearanceLimit),
buildExpectedClearanceField('Route', widget.expectedRoute),
buildExpectedClearanceField('Altitude', widget.expectedAltitude),
buildExpectedClearanceField('Transponder (Squawk)', widget.expectedSquawk),
buildExpectedClearanceField('Frequency', widget.expectedFrequency),
],
),
),
),
),
const SizedBox(width: 16), // Spacer between columns
// Actual Clearance Column
Expanded(
child: Card(
elevation: 2,
child: Padding(
padding: const EdgeInsets.all(16.0),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
const Text(
'Clearance',
style: TextStyle(fontSize: 22, fontWeight: FontWeight.bold),
),
const Divider(),
buildActualClearanceField(
'Clearance Limit',
_actualClearanceLimitController,
widget.expectedClearanceLimit,
),
buildActualClearanceField(
'Route',
_actualRouteController,
widget.expectedRoute,
),
buildActualClearanceField(
'Altitude',
_actualAltitudeController,
widget.expectedAltitude,
focusNode: _actualAltitudeFocusNode,
),
buildActualClearanceField(
'Transponder (Squawk)',
_actualSquawkController,
widget.expectedSquawk,
formatterList: [
FilteringTextInputFormatter.allow(RegExp(r'[0-7]')),
LengthLimitingTextInputFormatter(4),
],
),
buildActualClearanceField(
'Frequency',
_actualFrequencyController,
widget.expectedFrequency,
formatterList: [FrequencyInputFormatter()],
),
],
),
),
),
),
],
),
const SizedBox(height: 20),
// Proceed Button
ElevatedButton(
onPressed: _navigateToFinalClearance,
child: const Text('Proceed to Clearance Display'),
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: const Text('IFR Buddy'), // Global title
actions: [
IconButton(
icon: Icon(widget.isDarkMode ? Icons.dark_mode : Icons.light_mode),
onPressed: () {
widget.toggleDarkMode();
},
),
],
),
),
);
}
body: Padding(
padding: const EdgeInsets.all(16.0),
child: ListView(
children: [
// Explanation Text Card
const Card(
elevation: 2,
child: Padding(
padding: EdgeInsets.all(16.0),
child: Text(
'Use this Page while receiving your clearance. The arrow button copies the expected value. Same if left empty.',
style: TextStyle(fontSize: 16),
textAlign: TextAlign.center,
),
),
),
const SizedBox(height: 16),
// Main content side-by-side
Row(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
// Expected Clearance Column
Expanded(
child: Card(
elevation: 2,
child: Padding(
padding: const EdgeInsets.all(16.0),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
const Text(
'Expected',
style: TextStyle(fontSize: 22, fontWeight: FontWeight.bold),
),
const Divider(),
buildExpectedClearanceField('Clearance Limit', widget.expectedClearanceLimit),
buildExpectedClearanceField('Route', widget.expectedRoute),
buildExpectedClearanceField('Altitude', widget.expectedAltitude),
buildExpectedClearanceField('Frequency', widget.expectedFrequency),
buildExpectedClearanceField('Transponder (Squawk)', widget.expectedSquawk),
],
),
),
),
),
const SizedBox(width: 16), // Spacer between columns
// Actual Clearance Column
Expanded(
child: Card(
elevation: 2,
child: Padding(
padding: const EdgeInsets.all(16.0),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
const Text(
'Clearance',
style: TextStyle(fontSize: 22, fontWeight: FontWeight.bold),
),
const Divider(),
buildActualClearanceField(
'Clearance Limit',
_actualClearanceLimitController,
widget.expectedClearanceLimit,
),
buildActualClearanceField(
'Route',
_actualRouteController,
widget.expectedRoute,
),
buildActualClearanceField(
'Altitude',
_actualAltitudeController,
widget.expectedAltitude,
focusNode: _actualAltitudeFocusNode,
),
buildActualClearanceField(
'Frequency',
_actualFrequencyController,
widget.expectedFrequency,
formatterList: [FrequencyInputFormatter()],
),
buildActualClearanceField(
'Transponder (Squawk)',
_actualSquawkController,
widget.expectedSquawk,
formatterList: [
FilteringTextInputFormatter.allow(RegExp(r'[0-7]')),
LengthLimitingTextInputFormatter(4),
],
),
],
),
),
),
),
],
),
const SizedBox(height: 20),
// Proceed Button
ElevatedButton(
onPressed: _navigateToFinalClearance,
child: const Text('Proceed to Clearance Display'),
),
],
),
),
);
}
}