This commit is contained in:
Sven committed 2025-09-29 14:22:50 +02:00
1 parent 206283c2ca
commit e548f62bde
3 files changed
+31 -6

No files matched your search

@@ -233,6 +233,7 @@ class _AssignedJobsPageState extends State<AssignedJobsPage> with ProducerMixin,
message.track = Track(); message.track = Track();
message.track.time = Util.nowUnixSecondsUtc(); message.track.time = Util.nowUnixSecondsUtc();
message.track.pos = FinTaskPos(); message.track.pos = FinTaskPos();
message.track.pos!.time = currentPosition != null ? Util.toUnixSecondsUtc(currentPosition.timestamp) : 0;
message.track.pos!.lat = currentPosition != null ? currentPosition.latitude : 0.0; message.track.pos!.lat = currentPosition != null ? currentPosition.latitude : 0.0;
message.track.pos!.long = currentPosition != null ? currentPosition.longitude : 0.0; message.track.pos!.long = currentPosition != null ? currentPosition.longitude : 0.0;
message.track.pos!.acc = currentPosition != null ? currentPosition.accuracy.toInt() : 0; message.track.pos!.acc = currentPosition != null ? currentPosition.accuracy.toInt() : 0;
+29 -5
View File
@@ -14,15 +14,18 @@ import 'package:stadtbote/tools/messages/job_received_message.dart';
import 'package:stadtbote/tools/messages/refresh_badges_message.dart'; import 'package:stadtbote/tools/messages/refresh_badges_message.dart';
import 'package:stadtbote/tools/messages/remove_job_message.dart'; import 'package:stadtbote/tools/messages/remove_job_message.dart';
import 'package:stadtbote/tools/util.dart'; import 'package:stadtbote/tools/util.dart';
import 'package:expandable/expandable.dart';
import '../tools/messages/publish_payload_message.dart'; import '../tools/messages/publish_payload_message.dart';
final ScrollController _scrollController = ScrollController(); final ScrollController _scrollController = ScrollController();
Future<void> showAcceptJobsPopup(SharedMapReference mapReference, Function() onFinished) async { Future<void> showAcceptJobsPopup(SharedMapReference mapReference, Function() onFinished) async {
ExtendendStatefulBuilder extendedStatefulBuilder; late ExtendendStatefulBuilder extendedStatefulBuilder;
bool builderCreated = false;
bool isActive = true;
return showDialog<void>( final dialogFuture = showDialog<void>(
barrierDismissible: true, barrierDismissible: true,
context: MyApp.appNavigatorKey.currentContext!, context: MyApp.appNavigatorKey.currentContext!,
builder: (BuildContext context) { builder: (BuildContext context) {
@@ -58,10 +61,13 @@ Future<void> showAcceptJobsPopup(SharedMapReference mapReference, Function() onF
)); ));
}); });
builderCreated = true;
extendedStatefulBuilder.subscribe( extendedStatefulBuilder.subscribe(
queueId: Constants.messageTopicJobReceived, queueId: Constants.messageTopicJobReceived,
callback: (message) { callback: (message) {
var jobReceivedMessage = message.payload as JobReceivedMessage; var jobReceivedMessage = message.payload as JobReceivedMessage;
if (!isActive || extendedStatefulBuilderStateSetter == null) return;
if (jobReceivedMessage.job.state == 0) { if (jobReceivedMessage.job.state == 0) {
extendedStatefulBuilderStateSetter!(() {}); extendedStatefulBuilderStateSetter!(() {});
} }
@@ -72,10 +78,10 @@ Future<void> showAcceptJobsPopup(SharedMapReference mapReference, Function() onF
queueId: Constants.messageTopicJobDeleted, queueId: Constants.messageTopicJobDeleted,
callback: (message) { callback: (message) {
var jobDeletedMessage = message.payload as JobDeletedMessage; var jobDeletedMessage = message.payload as JobDeletedMessage;
if (!isActive || extendedStatefulBuilderStateSetter == null) return;
if (jobDeletedMessage.job.state == 0) { if (jobDeletedMessage.job.state == 0) {
extendedStatefulBuilderStateSetter!(() {}); extendedStatefulBuilderStateSetter!(() {});
} }
extendedStatefulBuilderStateSetter!(() {});
}, },
); );
@@ -104,8 +110,11 @@ Future<void> showAcceptJobsPopup(SharedMapReference mapReference, Function() onF
), ),
), ),
getDefaultButton("Liste schliessen", () { getDefaultButton("Liste schliessen", () {
extendedStatefulBuilder.unsubscribe(queueId: Constants.messageTopicJobReceived); isActive = false;
extendedStatefulBuilder.unsubscribe(queueId: Constants.messageTopicJobDeleted); if (builderCreated) {
extendedStatefulBuilder.unsubscribe(queueId: Constants.messageTopicJobReceived);
extendedStatefulBuilder.unsubscribe(queueId: Constants.messageTopicJobDeleted);
}
Navigator.pop(context); Navigator.pop(context);
@@ -120,6 +129,21 @@ Future<void> showAcceptJobsPopup(SharedMapReference mapReference, Function() onF
); );
}, },
); );
// Ensure we always clean up subscriptions even if the dialog is dismissed via barrier tap or back button
dialogFuture.whenComplete(() {
isActive = false;
if (builderCreated) {
try {
extendedStatefulBuilder.unsubscribe(queueId: Constants.messageTopicJobReceived);
extendedStatefulBuilder.unsubscribe(queueId: Constants.messageTopicJobDeleted);
} catch (_) {
// ignore cleanup errors
}
}
});
return dialogFuture;
} }
Future<List<Widget>> _fetchJobWidgets(StateSetter dialogState, Function() onFinished, SharedMapReference mapReference) async { Future<List<Widget>> _fetchJobWidgets(StateSetter dialogState, Function() onFinished, SharedMapReference mapReference) async {
+1 -1
View File
@@ -16,7 +16,7 @@ publish_to: 'none' # Remove this line if you wish to publish to pub.dev
# https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html # https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html
# In Windows, build-name is used as the major, minor, and patch parts # In Windows, build-name is used as the major, minor, and patch parts
# of the product and file versions while build-number is used as the build suffix. # of the product and file versions while build-number is used as the build suffix.
version: 346.0.0+346 version: 347.0.0+347
environment: environment:
sdk: '>=3.5.0 <4.0.0' sdk: '>=3.5.0 <4.0.0'