import 'package:anyway/main.dart'; import 'package:anyway/modules/help_dialog.dart'; import 'package:anyway/pages/current_trip.dart'; import 'package:anyway/pages/settings.dart'; import 'package:flutter/material.dart'; import 'package:anyway/constants.dart'; import 'package:anyway/structs/trip.dart'; import 'package:anyway/modules/trips_saved_list.dart'; import 'package:anyway/utils/load_trips.dart'; import 'package:anyway/pages/new_trip_location.dart'; import 'package:anyway/pages/onboarding.dart'; // BasePage is the scaffold that holds a child page and a side drawer // The side drawer is the main way to switch between pages class BasePage extends StatefulWidget { final Widget mainScreen; final Widget title; final List helpTexts; const BasePage({ super.key, required this.mainScreen, this.title = const Text(APP_NAME), this.helpTexts = const [], }); @override State createState() => _BasePageState(); } class _BasePageState extends State { @override Widget build(BuildContext context) { savedTrips.loadTrips(); return Scaffold( appBar: AppBar( title: widget.title, actions: [ IconButton( icon: const Icon(Icons.help), tooltip: 'Help', onPressed: () { if (widget.helpTexts.isNotEmpty) { helpDialog(context, widget.helpTexts[0], widget.helpTexts[1]); } } ), ], ), body: Center(child: widget.mainScreen), drawer: Drawer( child: Column( children: [ Container( decoration: BoxDecoration( gradient: APP_GRADIENT, ), height: 150, child: 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), // TODO: this is not working! selected: widget.mainScreen 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: Icon(Icons.help), // TODO: this is not working! selected: widget.mainScreen is OnboardingPage, onTap: () { Navigator.of(context).push( MaterialPageRoute( builder: (context) => OnboardingPage() ) ); }, ), // settings in the bottom of the drawer ListTile( title: const Text('Settings'), leading: const Icon(Icons.settings), // TODO: this is not working! selected: widget.mainScreen is SettingsPage, onTap: () { Navigator.of(context).push( MaterialPageRoute( builder: (context) => SettingsPage() ) ); }, ), ], ), ), ); } }