diff --git a/lib/main.dart b/lib/main.dart index 9f26e48..6119ba9 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -3,6 +3,7 @@ import 'dart:async'; import 'package:dart_mq/dart_mq.dart'; import 'package:synchronized/synchronized.dart'; import 'package:flutter/material.dart'; +import 'package:flutter/services.dart'; import 'package:geolocator/geolocator.dart'; import 'package:isar/isar.dart'; import 'package:path_provider/path_provider.dart'; @@ -202,6 +203,7 @@ class Main extends StatefulWidget { } class _MainState extends State
with SingleTickerProviderStateMixin, ProducerMixin, ConsumerMixin { + DateTime? _lastBackPressed; late ContentViewWidget _currentContent; late WidgetStack contentStack = WidgetStack(); @@ -274,12 +276,27 @@ class _MainState extends State
with SingleTickerProviderStateMixin, Produc return ColoredSafeArea( key: GlobalKey(), child: PopScope( - canPop: contentStack.isNotEmpty, + canPop: false, onPopInvokedWithResult: (didPop, result) async { if (didPop) return; if (contentStack.isNotEmpty) { _popContentView(1); // alten Inhalt entfernen + } else { + final now = DateTime.now(); + if (_lastBackPressed == null || now.difference(_lastBackPressed!) > const Duration(seconds: 2)) { + _lastBackPressed = now; + if (mounted) { + ScaffoldMessenger.of(context).hideCurrentSnackBar(); + ScaffoldMessenger.of(context).showSnackBar( + const SnackBar(content: Text('Zum Beenden erneut Zurück drücken'), duration: Duration(seconds: 2)), + ); + } + } else { + // Zweiter Zurück-Klick innerhalb des Zeitfensters: App beenden + // ignore: use_build_context_synchronously + SystemNavigator.pop(); + } } }, child: Scaffold(