anyway/frontend/lib/layouts/scaffold.dart

122 lines
3.5 KiB
Dart

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()
)
);
},
),
],
),
),
);
}
}