summaryrefslogtreecommitdiff
path: root/lib/pages
diff options
context:
space:
mode:
authorAldrik Ramaekers <aldrik@amftech.nl>2022-11-03 10:59:37 +0100
committerAldrik Ramaekers <aldrik@amftech.nl>2022-11-03 11:06:18 +0100
commitd14e215396f7aee61fb8d7963736063ee859b928 (patch)
tree6b21387fe0e5765a4d74e791b62a7d9eeb64b761 /lib/pages
parentec7c6e4f7ebd4e096722c7cfd1e651867207ec07 (diff)
werken aan navigatie
Diffstat (limited to 'lib/pages')
-rw-r--r--lib/pages/agenda_page.dart4
-rw-r--r--lib/pages/home_page.dart7
-rw-r--r--lib/pages/navigation_page.dart180
3 files changed, 189 insertions, 2 deletions
diff --git a/lib/pages/agenda_page.dart b/lib/pages/agenda_page.dart
index 174f71d..abfefec 100644
--- a/lib/pages/agenda_page.dart
+++ b/lib/pages/agenda_page.dart
@@ -89,13 +89,13 @@ class _AgendaPageState extends State<AgendaPage> {
currentSelectedShiftIndex = 1;
// set up the buttons
- Widget cancelButton = FlatButton(
+ Widget cancelButton = TextButton(
child: Text("Terug"),
onPressed: () {
Navigator.pop(context);
},
);
- Widget continueButton = FlatButton(
+ Widget continueButton = TextButton(
child: Text("Ok"),
onPressed: () async {
await addShiftsFromDialog();
diff --git a/lib/pages/home_page.dart b/lib/pages/home_page.dart
index ee2a5cd..404f6cc 100644
--- a/lib/pages/home_page.dart
+++ b/lib/pages/home_page.dart
@@ -2,6 +2,7 @@ import 'package:flutter/material.dart';
import 'package:training_planner/pages/agenda_page.dart';
import 'package:training_planner/pages/developer_page.dart';
import 'package:training_planner/pages/logbook_page.dart';
+import 'package:training_planner/pages/navigation_page.dart';
import 'package:training_planner/pages/settings_page.dart';
import 'package:training_planner/shift.dart';
import 'package:training_planner/main.dart';
@@ -25,6 +26,7 @@ class _HomePageState extends State<HomePage> {
_widgetOptions = <Widget>[
new AgendaPage(agendaWeekNr: widget.agendaWeekNr),
new LogbookPage(),
+ new NavigationPage(),
];
super.initState();
@@ -36,6 +38,7 @@ class _HomePageState extends State<HomePage> {
_widgetOptions = <Widget>[
new AgendaPage(agendaWeekNr: widget.agendaWeekNr),
new LogbookPage(),
+ new NavigationPage(),
];
_selectedIndex = index;
});
@@ -109,6 +112,10 @@ class _HomePageState extends State<HomePage> {
icon: Icon(Icons.book),
label: 'Logboek',
),
+ BottomNavigationBarItem(
+ icon: Icon(Icons.pin_drop),
+ label: 'Delivery',
+ ),
],
currentIndex: _selectedIndex,
selectedItemColor: Style.titleColor,
diff --git a/lib/pages/navigation_page.dart b/lib/pages/navigation_page.dart
new file mode 100644
index 0000000..58ea307
--- /dev/null
+++ b/lib/pages/navigation_page.dart
@@ -0,0 +1,180 @@
+import 'dart:async';
+
+import 'package:carousel_slider/carousel_slider.dart';
+import 'package:flutter/material.dart';
+import 'package:geolocator/geolocator.dart';
+import 'package:here_sdk/mapview.dart';
+import 'package:in_date_utils/in_date_utils.dart' as DateUtilities;
+import 'package:loading_animation_widget/loading_animation_widget.dart';
+import 'package:training_planner/RoutingExample.dart';
+import 'package:training_planner/events/MapPanningEvent.dart';
+import 'package:training_planner/main.dart';
+import 'package:training_planner/shift.dart';
+import 'package:training_planner/style/style.dart';
+import 'package:training_planner/utils/date.dart';
+import 'package:training_planner/widgets/agenda_week.dart';
+import 'package:flutter_local_notifications/flutter_local_notifications.dart';
+import 'package:here_sdk/core.dart';
+import 'package:here_sdk/core.engine.dart';
+import 'package:here_sdk/core.errors.dart';
+import 'package:here_sdk/mapview.dart';
+
+class NavigationPage extends StatefulWidget {
+ @override
+ _NavigationPageState createState() => _NavigationPageState();
+
+ const NavigationPage({Key? key}) : super(key: key);
+}
+
+class _NavigationPageState extends State<NavigationPage> {
+ RoutingExample? _routingExample;
+
+ StreamSubscription? panGestureEvent;
+
+ Future<bool> _handleLocationPermission() async {
+ bool serviceEnabled;
+ LocationPermission permission;
+
+ serviceEnabled = await Geolocator.isLocationServiceEnabled();
+ if (!serviceEnabled) {
+ ScaffoldMessenger.of(context).showSnackBar(const SnackBar(
+ content: Text(
+ 'Location services are disabled. Please enable the services')));
+ return false;
+ }
+ permission = await Geolocator.checkPermission();
+ if (permission == LocationPermission.denied) {
+ permission = await Geolocator.requestPermission();
+ if (permission == LocationPermission.denied) {
+ ScaffoldMessenger.of(context).showSnackBar(
+ const SnackBar(content: Text('Location permissions are denied')));
+ return false;
+ }
+ }
+ if (permission == LocationPermission.deniedForever) {
+ ScaffoldMessenger.of(context).showSnackBar(const SnackBar(
+ content: Text(
+ 'Location permissions are permanently denied, we cannot request permissions.')));
+ return false;
+ }
+ return true;
+ }
+
+ @override
+ initState() {
+ super.initState();
+
+ _handleLocationPermission();
+
+ panGestureEvent = eventBus.on<MapPanningEvent>().listen((event) {
+ changeIsLookingAround(event.isPanning);
+ });
+ }
+
+ void changeIsLookingAround(bool val) {
+ setState(() {
+ _routingExample?.isLookingAround = val;
+ });
+ }
+
+ void _zoomIn() {
+ _routingExample?.changeZoom(_routingExample!.currentZoom + 1);
+ }
+
+ void _zoomOut() {
+ _routingExample?.changeZoom(_routingExample!.currentZoom - 1);
+ }
+
+ @override
+ Widget build(BuildContext context) {
+ return Scaffold(
+ floatingActionButtonLocation: FloatingActionButtonLocation.centerDocked,
+ floatingActionButton: Padding(
+ padding: const EdgeInsets.all(8.0),
+ child: Row(
+ mainAxisAlignment: MainAxisAlignment.center,
+ children: <Widget>[
+ Visibility(
+ visible: _routingExample == null
+ ? false
+ : _routingExample!.isLookingAround,
+ child: FloatingActionButton(
+ backgroundColor: Colors.green,
+ child: const Icon(Icons.center_focus_strong),
+ onPressed: () => {
+ changeIsLookingAround(false),
+ _routingExample?.flyTo(_routingExample!.lastPosition)
+ },
+ ),
+ ),
+ Padding(padding: EdgeInsets.all(5)),
+ FloatingActionButton(
+ onPressed: () => _zoomOut(),
+ child: Icon(Icons.zoom_out),
+ ),
+ FloatingActionButton(
+ onPressed: () => _zoomIn(),
+ child: Icon(Icons.zoom_in),
+ )
+ ],
+ ),
+ ),
+ body: Stack(
+ children: [
+ HereMap(onMapCreated: _onMapCreated),
+ ],
+ ),
+ );
+ }
+
+ void _onMapCreated(HereMapController hereMapController) {
+ hereMapController.mapScene.loadSceneForMapScheme(MapScheme.normalDay,
+ (MapError? error) {
+ if (error == null) {
+ _routingExample = RoutingExample(hereMapController);
+ _routingExample?.addRoute();
+ } else {
+ print("Map scene not loaded. MapError: " + error.toString());
+ }
+ });
+ }
+
+ @override
+ void dispose() {
+ // Free HERE SDK resources before the application shuts down.
+ SDKNativeEngine.sharedInstance?.dispose();
+ SdkContext.release();
+ panGestureEvent?.cancel();
+
+ _routingExample?.timer?.cancel();
+ super.dispose();
+ }
+
+ // A helper method to show a dialog.
+ Future<void> _showDialog(String title, String message) async {
+ return showDialog<void>(
+ context: context,
+ barrierDismissible: false,
+ builder: (BuildContext context) {
+ return AlertDialog(
+ title: Text(title),
+ content: SingleChildScrollView(
+ child: ListBody(
+ children: <Widget>[
+ Text(message),
+ ],
+ ),
+ ),
+ actions: <Widget>[
+ TextButton(
+ child: Text('OK'),
+ onPressed: () {
+ Navigator.of(context).pop();
+ },
+ ),
+ ],
+ );
+ },
+ );
+ }
+}