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 on State { Widget mainScaffold( BuildContext context, { Widget child = const Text("emptiness"), Widget title = const Text(APP_NAME), List 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() ) ); }, ), ], ), ), ); } }