reworked page layout inheritence
This commit is contained in:
		
							
								
								
									
										121
									
								
								frontend/lib/layouts/scaffold.dart
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										121
									
								
								frontend/lib/layouts/scaffold.dart
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,121 @@ | ||||
| import 'package:flutter/material.dart'; | ||||
|  | ||||
| import 'package:anyway/constants.dart'; | ||||
|  | ||||
| import 'package:anyway/main.dart'; | ||||
| import 'package:anyway/modules/help_dialog.dart'; | ||||
| import 'package:anyway/modules/trips_saved_list.dart'; | ||||
|  | ||||
| import 'package:anyway/pages/onboarding.dart'; | ||||
| import 'package:anyway/pages/current_trip.dart'; | ||||
| import 'package:anyway/pages/settings.dart'; | ||||
| import 'package:anyway/pages/new_trip_location.dart'; | ||||
|  | ||||
|  | ||||
| mixin ScaffoldLayout<T extends StatefulWidget> on State<T> { | ||||
|   Widget mainScaffold( | ||||
|     BuildContext context, | ||||
|     { | ||||
|       Widget child = const Text("emptiness"), | ||||
|       Widget title = const Text(APP_NAME), | ||||
|       List<String> helpTexts = const [] | ||||
|     } | ||||
|   ) { | ||||
|     return Scaffold( | ||||
|       appBar: AppBar( | ||||
|         title: title, | ||||
|         actions: [ | ||||
|           IconButton( | ||||
|             icon: const Icon(Icons.help), | ||||
|             tooltip: 'Help', | ||||
|             onPressed: () { | ||||
|               if (helpTexts.isNotEmpty) { | ||||
|                 helpDialog(context, helpTexts[0], helpTexts[1]); | ||||
|               } | ||||
|             } | ||||
|           ), | ||||
|         ], | ||||
|       ), | ||||
|       body: Center(child: child), | ||||
|       drawer: Drawer( | ||||
|         child: Column( | ||||
|           children: [ | ||||
|             Container( | ||||
|               decoration: const BoxDecoration( | ||||
|                 gradient: APP_GRADIENT, | ||||
|               ), | ||||
|               height: 150, | ||||
|               child: const Center( | ||||
|                 child: Text( | ||||
|                   APP_NAME, | ||||
|                   style: TextStyle( | ||||
|                     color: Colors.white, | ||||
|                     fontSize: 24, | ||||
|                     fontWeight: FontWeight.bold, | ||||
|                   ), | ||||
|                 ), | ||||
|               ), | ||||
|             ), | ||||
|  | ||||
|             ListTile( | ||||
|               title: const Text('Your Trips'), | ||||
|               leading: const Icon(Icons.map), | ||||
|               selected: widget is TripPage, | ||||
|               onTap: () {}, | ||||
|               trailing: ElevatedButton( | ||||
|                 onPressed: () { | ||||
|                   Navigator.of(context).push( | ||||
|                     MaterialPageRoute( | ||||
|                       builder: (context) => const NewTripPage() | ||||
|                     ) | ||||
|                   ); | ||||
|                 }, | ||||
|                 child: const Text('New'), | ||||
|               ), | ||||
|             ), | ||||
|  | ||||
|             // Adds a ListView to the drawer. This ensures the user can scroll | ||||
|             // through the options in the drawer if there isn't enough vertical | ||||
|             // space to fit everything. | ||||
|             Expanded( | ||||
|               child: TripsOverview(trips: savedTrips), | ||||
|             ), | ||||
|             ElevatedButton( | ||||
|               onPressed: () async { | ||||
|                 savedTrips.clearTrips(); | ||||
|               }, | ||||
|               child: const Text('Clear trips'), | ||||
|             ), | ||||
|             const Divider(indent: 10, endIndent: 10), | ||||
|             ListTile( | ||||
|               title: const Text('How to use'), | ||||
|               leading: const Icon(Icons.help), | ||||
|               selected: widget is OnboardingPage, | ||||
|               onTap: () { | ||||
|                 Navigator.of(context).push( | ||||
|                   MaterialPageRoute( | ||||
|                     builder: (context) => const OnboardingPage() | ||||
|                   ) | ||||
|                 ); | ||||
|               }, | ||||
|             ), | ||||
|  | ||||
|             // settings in the bottom of the drawer | ||||
|             ListTile( | ||||
|               title: const Text('Settings'), | ||||
|               leading: const Icon(Icons.settings), | ||||
|               selected: widget is SettingsPage, | ||||
|               onTap: () { | ||||
|                 Navigator.of(context).push( | ||||
|                   MaterialPageRoute( | ||||
|                     builder: (context) => SettingsPage() | ||||
|                   ) | ||||
|                 ); | ||||
|               }, | ||||
|             ), | ||||
|           ], | ||||
|         ), | ||||
|       ), | ||||
|     ); | ||||
|   } | ||||
| } | ||||
		Reference in New Issue
	
	Block a user