finished tracking. But not tested enough yet
time
This commit is contained in:
@@ -2,15 +2,17 @@ import 'dart:async';
|
||||
import 'dart:math';
|
||||
|
||||
import 'package:fforte/l10n/app_localizations.dart';
|
||||
import 'package:fforte/screens/helper/add_entries_dialog_helper.dart';
|
||||
import 'package:fforte/screens/helper/snack_bar_helper.dart';
|
||||
import 'package:fforte/services/notification_service.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_map/flutter_map.dart';
|
||||
import 'package:flutter_map_location_marker/flutter_map_location_marker.dart';
|
||||
import 'package:geolocator/geolocator.dart';
|
||||
import 'package:latlong2/latlong.dart';
|
||||
|
||||
class Tracking extends StatefulWidget {
|
||||
final LatLng startPosition;
|
||||
final Position startPosition;
|
||||
final TextEditingController weg;
|
||||
const Tracking({super.key, required this.startPosition, required this.weg});
|
||||
|
||||
@@ -21,6 +23,7 @@ class Tracking extends StatefulWidget {
|
||||
class _TrackingState extends State<Tracking> {
|
||||
List<LatLng> pathList = [];
|
||||
StreamSubscription<Position>? positionStream;
|
||||
LocationMarkerPosition? locationMarkerPosition;
|
||||
bool positionStreamRunning = false;
|
||||
MapController mapController = MapController();
|
||||
|
||||
@@ -48,6 +51,13 @@ class _TrackingState extends State<Tracking> {
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
locationMarkerPosition = LocationMarkerPosition(
|
||||
latitude: widget.startPosition.latitude,
|
||||
longitude: widget.startPosition.longitude,
|
||||
accuracy: widget.startPosition.accuracy,
|
||||
);
|
||||
|
||||
super.initState();
|
||||
}
|
||||
|
||||
@@ -66,6 +76,8 @@ class _TrackingState extends State<Tracking> {
|
||||
widget.weg.text += "${pos.latitude},${pos.longitude}";
|
||||
}
|
||||
}
|
||||
NotificationService().deleteNotification();
|
||||
|
||||
super.dispose();
|
||||
}
|
||||
|
||||
@@ -88,20 +100,26 @@ class _TrackingState extends State<Tracking> {
|
||||
locationSettings: AndroidSettings(
|
||||
accuracy: LocationAccuracy.high,
|
||||
distanceFilter: 0,
|
||||
// foregroundNotificationConfig:
|
||||
// mounted
|
||||
// ? ForegroundNotificationConfig(
|
||||
// notificationTitle:
|
||||
// AppLocalizations.of(context)!.trackingRunningInBackground,
|
||||
// notificationText: "",
|
||||
// )
|
||||
// : null,
|
||||
foregroundNotificationConfig:
|
||||
mounted
|
||||
? ForegroundNotificationConfig(
|
||||
notificationTitle:
|
||||
AppLocalizations.of(context)!.trackingRunningInBackground,
|
||||
notificationText: "",
|
||||
)
|
||||
: null,
|
||||
),
|
||||
).listen((Position? position) {
|
||||
if (position != null) {
|
||||
setState(() {
|
||||
pathList.add(LatLng(position.latitude, position.longitude));
|
||||
// pathList.add(LatLng(rand.nextInt(5) + 40, position.longitude));
|
||||
pathList.add(LatLng(position.latitude, position.longitude));
|
||||
// pathList.add(LatLng(rand.nextInt(5) + 40, position.longitude));
|
||||
|
||||
locationMarkerPosition = LocationMarkerPosition(
|
||||
latitude: position.latitude,
|
||||
longitude: position.longitude,
|
||||
accuracy: position.accuracy,
|
||||
);
|
||||
});
|
||||
} else {
|
||||
if (mounted) {
|
||||
@@ -112,6 +130,10 @@ class _TrackingState extends State<Tracking> {
|
||||
}
|
||||
}
|
||||
});
|
||||
positionStream!.onError((e) {
|
||||
NotificationService().deleteNotification();
|
||||
NotificationService().showNotification(title: "ERROR: $e");
|
||||
});
|
||||
}
|
||||
|
||||
@override
|
||||
@@ -121,6 +143,25 @@ class _TrackingState extends State<Tracking> {
|
||||
title: Text(AppLocalizations.of(context)!.tracking),
|
||||
// leading: IconButton(onPressed: () {}, icon: Icon(Icons.arrow_back_rounded)),
|
||||
actions: [
|
||||
if (!positionStreamRunning)
|
||||
IconButton(
|
||||
onPressed: () async {
|
||||
bool delete =
|
||||
await AddEntriesDialogHelper.deleteCompleteRouteDialog(
|
||||
context,
|
||||
);
|
||||
|
||||
if (delete) {
|
||||
setState(() {
|
||||
pathList = [];
|
||||
});
|
||||
}
|
||||
},
|
||||
icon: Icon(
|
||||
Icons.delete,
|
||||
color: Theme.of(context).colorScheme.errorContainer,
|
||||
),
|
||||
),
|
||||
if (positionStreamRunning)
|
||||
IconButton(
|
||||
onPressed: () {
|
||||
@@ -130,7 +171,10 @@ class _TrackingState extends State<Tracking> {
|
||||
NotificationService().deleteNotification();
|
||||
});
|
||||
},
|
||||
icon: Icon(Icons.stop_rounded),
|
||||
icon: Icon(
|
||||
Icons.stop_rounded,
|
||||
color: Theme.of(context).colorScheme.errorContainer,
|
||||
),
|
||||
),
|
||||
IconButton(
|
||||
onPressed: () {
|
||||
@@ -152,7 +196,13 @@ class _TrackingState extends State<Tracking> {
|
||||
),
|
||||
floatingActionButton: FloatingActionButton(
|
||||
onPressed: () {
|
||||
mapController.move(pathList.last, 16);
|
||||
mapController.move(
|
||||
LatLng(
|
||||
locationMarkerPosition!.latitude,
|
||||
locationMarkerPosition!.longitude,
|
||||
),
|
||||
16,
|
||||
);
|
||||
},
|
||||
child: Icon(Icons.my_location),
|
||||
),
|
||||
@@ -165,13 +215,16 @@ class _TrackingState extends State<Tracking> {
|
||||
InteractiveFlag.drag |
|
||||
InteractiveFlag.pinchMove,
|
||||
),
|
||||
initialCenter: widget.startPosition,
|
||||
initialCenter: LatLng(
|
||||
widget.startPosition.latitude,
|
||||
widget.startPosition.longitude,
|
||||
),
|
||||
initialZoom: 16.0,
|
||||
),
|
||||
children: [
|
||||
TileLayer(
|
||||
urlTemplate: 'https://tile.openstreetmap.org/{z}/{x}/{y}.png',
|
||||
userAgentPackageName: 'com.example.app',
|
||||
userAgentPackageName: 'de.lupus.apps',
|
||||
),
|
||||
if (pathList.isNotEmpty)
|
||||
PolylineLayer(
|
||||
@@ -179,16 +232,17 @@ class _TrackingState extends State<Tracking> {
|
||||
Polyline(strokeWidth: 2.0, points: pathList, color: Colors.red),
|
||||
],
|
||||
),
|
||||
CircleLayer(
|
||||
circles: [
|
||||
CircleMarker(
|
||||
color: Colors.blue,
|
||||
point: pathList.isEmpty ? widget.startPosition : pathList.last,
|
||||
radius: 5,
|
||||
useRadiusInMeter: true,
|
||||
),
|
||||
],
|
||||
),
|
||||
// CircleLayer(
|
||||
// circles: [
|
||||
// CircleMarker(
|
||||
// color: Colors.blue,
|
||||
// point: pathList.isEmpty ? widget.startPosition : pathList.last,
|
||||
// radius: 5,
|
||||
// useRadiusInMeter: true,
|
||||
// ),
|
||||
// ],
|
||||
// ),
|
||||
CurrentLocationLayer(),
|
||||
],
|
||||
),
|
||||
);
|
||||
|
||||
Reference in New Issue
Block a user