Skip to content

Commit

Permalink
Finish SelectionScreen for now
Browse files Browse the repository at this point in the history
  • Loading branch information
gereonelvers committed Jan 12, 2024
1 parent c48f34e commit 2b0a75e
Show file tree
Hide file tree
Showing 9 changed files with 609 additions and 134 deletions.
Binary file added assets/img/db-logo.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added assets/img/flix-logo.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
231 changes: 127 additions & 104 deletions lib/screens/landing_screen.dart

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion lib/screens/main_screen.dart
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,7 @@ class MainScreen extends StatelessWidget {
Padding(
padding: const EdgeInsets.only(left: 6.0),
child: Text(
"Login",
"My Account",
style: GoogleFonts.inter(textStyle: const TextStyle(fontSize: 14, color: Colors.white)),
),
)
Expand Down
100 changes: 78 additions & 22 deletions lib/screens/selection_screen.dart
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:google_fonts/google_fonts.dart';
import 'package:intl/intl.dart';

import '../state/application/application_bloc.dart';
import '../util/application_screen.dart';
Expand All @@ -12,31 +14,85 @@ class SelectionScreen extends StatelessWidget {
ApplicationBloc applicationBloc = BlocProvider.of<ApplicationBloc>(context);
return BlocBuilder<ApplicationBloc, ApplicationState>(builder: (context, state) {
return Padding(
padding: const EdgeInsets.fromLTRB(64, 96, 64, 32),
padding: const EdgeInsets.fromLTRB(128, 70, 128, 32),
child: Card(
color: Colors.white,
child: Column(
color: const Color(0xfff1fffb),
child: Stack(
children: [
Row(
children: [
Padding(
padding: const EdgeInsets.all(8.0),
child: IconButton(onPressed: (){
applicationBloc.currentScreen = ApplicationScreen.landing;
applicationBloc.add(UpdateScreenEvent());
}, icon: const Row(
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.center,
children: [
Padding(
padding: EdgeInsets.only(right: 6.0),
child: Icon(Icons.arrow_back_rounded),
),
Text("Zurück")
],
),),
Align(
alignment: Alignment.topLeft,
child: Padding(
padding: const EdgeInsets.all(8.0),
child: IconButton(
onPressed: () => applicationBloc.navigateTo(ApplicationScreen.landing),
icon: const Text("← Back"),
),
],
),
),
Align(
alignment: Alignment.topCenter,
child: Column(
children: [
DefaultTextStyle(
style: GoogleFonts.inter(textStyle: const TextStyle(fontSize: 32, color: Colors.black54)),
child: Padding(
padding: const EdgeInsets.fromLTRB(256, 24, 256, 16),
child: Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
const Text("Going from "),
MouseRegion(
cursor: SystemMouseCursors.click,
child: GestureDetector(
onTap: () => applicationBloc.navigateTo(ApplicationScreen.landing),
child: Text(
applicationBloc.originTextController.text,
style: const TextStyle(decoration: TextDecoration.underline, color: Colors.black45),
)),
),
const Text(" to "),
MouseRegion(
cursor: SystemMouseCursors.click,
child: GestureDetector(
onTap: () => applicationBloc.navigateTo(ApplicationScreen.landing),
child: Text(
applicationBloc.destinationTextController.text,
style: const TextStyle(decoration: TextDecoration.underline, color: Colors.black45),
)),
),
const Text(" on "),
MouseRegion(
cursor: SystemMouseCursors.click,
child: GestureDetector(
onTap: () => applicationBloc.navigateTo(ApplicationScreen.landing),
child: Text(
DateFormat("dd.MM.yy 'after' hh:mm a").format(applicationBloc.time),
style: const TextStyle(decoration: TextDecoration.underline, color: Colors.black45),
)),
),
],
),
),
),
applicationBloc.routes.isEmpty
? const Align(
alignment: Alignment.center,
child: Padding(
padding: EdgeInsets.all(32.0),
child: CircularProgressIndicator(),
))
: Expanded(
child: Padding(
padding: const EdgeInsets.only(left: 196, right: 196),
child: GridView.count(
physics: const ScrollPhysics(),
shrinkWrap: true,
childAspectRatio: 18 / 3,
crossAxisCount: 1,
children: applicationBloc.routes),
))
],
),
),
],
)),
Expand Down
111 changes: 105 additions & 6 deletions lib/state/application/application_bloc.dart
Original file line number Diff line number Diff line change
@@ -1,28 +1,127 @@
import 'dart:convert';
import 'dart:math';

import 'package:flutter/cupertino.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:http/http.dart' as http;

import '../../util/application_screen.dart';
import '../../util/route.dart';

part 'application_event.dart';

part 'application_state.dart';

class ApplicationBloc extends Bloc<ApplicationEvent, ApplicationState> {
ApplicationScreen currentScreen = ApplicationScreen.landing;
String sessionID = "";

List<String> cities = const ["Hamburg", "Berlin", "Munich"];
List<NavigationRoute> routes = [];
int selectedRoute = 0;

double currentInsuranceValue = 2000;
int selectedInsuranceCard = 0;
TextEditingController startTextController = TextEditingController();
TextEditingController originTextController = TextEditingController();
TextEditingController timeTextController = TextEditingController();
String origin = "Hamburg";
String destination = "München";
TextEditingController destinationTextController = TextEditingController();
DateTime time = DateTime.now();

ApplicationBloc() : super(ApplicationInitial()) {
on<ApplicationEvent>((event, emit) {
});
sessionID = generateRandomString(10);
on<ApplicationEvent>((event, emit) {});
on<UpdateScreenEvent>((event, emit) {
emit(ApplicationUpdating());
emit(ApplicationInitial());
});
}

// Using TextControllers for maintaining state is _aweful_ code style lmao
getRoutes() async {
final queryParameters = {
'origin': originTextController.text,
'destination': destinationTextController.text,
'mode': "transit",
'language': 'EN',
'departure_time': (time.toUtc().millisecondsSinceEpoch ~/ 1000).toString(),
};
final uri = Uri.https('valuevoyageserver-production.up.railway.app', '/directions', queryParameters);
final res = await http.get(uri);
final parsed = jsonDecode(res.body);
routes = (parsed['routes'] as List).map<NavigationRoute>((json) => NavigationRoute.fromJson(json)).toList();
add(UpdateScreenEvent());
}

getMockRoutes() {
routes = [
NavigationRoute(
arrivalTime: DateTime.now().add(const Duration(hours: 6)),
departureTime: DateTime.now(),
startAddress: "Hamburg Central Station",
endAddress: "Munich Central Station",
steps: [
NavigationRouteStep(
departureStop: "Hamburg Central Station",
arrivalStop: "Berlin Central Station",
departureTime: DateTime.now().add(const Duration(hours: 1, minutes: 5)),
arrivalTime: DateTime.now().add(const Duration(hours: 6, minutes: 12)),
agency: 'Deutsche Bahn',
lineShortName: 'ICE518',
punctuality: 0.95),
NavigationRouteStep(
departureStop: "Berlin Central Station",
arrivalStop: "Munich Central Station",
departureTime: DateTime.now().add(const Duration(hours: 2, minutes: 6)),
arrivalTime: DateTime.now().add(const Duration(hours: 11, minutes: 26)),
agency: 'Flixbus',
lineShortName: 'N150',
punctuality: 0.58),
],
),
NavigationRoute(
arrivalTime: DateTime.now().add(const Duration(hours: 6)),
departureTime: DateTime.now(),
startAddress: "Hamburg Central Station",
endAddress: "Munich Central Station",
steps: [
NavigationRouteStep(
departureStop: "Hamburg Central Station",
arrivalStop: "Berlin Central Station",
departureTime: DateTime.now().add(const Duration(hours: 1, minutes: 5)),
arrivalTime: DateTime.now().add(const Duration(hours: 6, minutes: 12)),
agency: 'Deutsche Bahn',
lineShortName: 'ICE518',
punctuality: 0.95),
NavigationRouteStep(
departureStop: "Berlin Central Station",
arrivalStop: "Munich Central Station",
departureTime: DateTime.now().add(const Duration(hours: 2, minutes: 6)),
arrivalTime: DateTime.now().add(const Duration(hours: 11, minutes: 26)),
agency: 'Flixbus',
lineShortName: 'N150',
punctuality: 0.58),
],
),
];
add(UpdateScreenEvent());
}

autocomplete(String input) async {
// https://maps.googleapis.com/maps/api/place/autocomplete/json?input=Goldacher+Stra&sessiontoken=placeholder
final queryParameters = {'input': input, 'sessiontoken': sessionID, 'language': 'EN'};
final uri = Uri.https('valuevoyageserver-production.up.railway.app', '/autocomplete', queryParameters);
final res = await http.get(uri);
print("Autocomplete:");
print(res.statusCode);
print(res.body);
}

String generateRandomString(int len) {
var r = Random();
return String.fromCharCodes(List.generate(len, (index) => r.nextInt(33) + 89));
}

navigateTo(ApplicationScreen screen) {
currentScreen = screen;
add(UpdateScreenEvent());
}
}
Loading

0 comments on commit 2b0a75e

Please sign in to comment.