💄 The universal escape now can close the fade made dialog

This commit is contained in:
2025-11-24 23:21:52 +08:00
parent 88c8227c66
commit 77ac0428ea
3 changed files with 23 additions and 0 deletions

View File

@@ -157,6 +157,9 @@ String _parseRemoteError(DioException err) {
return message ?? err.toString(); return message ?? err.toString();
} }
// Track active overlay dialogs for dismissal
final List<void Function()> _activeOverlayDialogs = [];
Future<T?> showOverlayDialog<T>({ Future<T?> showOverlayDialog<T>({
required Widget Function(BuildContext context, void Function(T? result) close) required Widget Function(BuildContext context, void Function(T? result) close)
builder, builder,
@@ -175,6 +178,7 @@ Future<T?> showOverlayDialog<T>({
} }
entry.remove(); entry.remove();
_activeOverlayDialogs.remove(close);
completer.complete(result); completer.complete(result);
} }
@@ -215,10 +219,21 @@ Future<T?> showOverlayDialog<T>({
), ),
); );
_activeOverlayDialogs.add(() => close(null));
globalOverlay.currentState!.insert(entry); globalOverlay.currentState!.insert(entry);
return completer.future; return completer.future;
} }
// Close the topmost overlay dialog if any exists
bool closeTopmostOverlayDialog() {
if (_activeOverlayDialogs.isNotEmpty) {
final closeFunc = _activeOverlayDialogs.last;
closeFunc();
return true;
}
return false;
}
const kDialogMaxWidth = 480.0; const kDialogMaxWidth = 480.0;
void showErrorAlert(dynamic err, {IconData? icon}) { void showErrorAlert(dynamic err, {IconData? icon}) {

View File

@@ -13,6 +13,7 @@ import 'package:island/route.dart';
import 'package:island/pods/userinfo.dart'; import 'package:island/pods/userinfo.dart';
import 'package:island/pods/websocket.dart'; import 'package:island/pods/websocket.dart';
import 'package:island/services/responsive.dart'; import 'package:island/services/responsive.dart';
import 'package:island/widgets/alert.dart';
import 'package:island/widgets/upload_overlay.dart'; import 'package:island/widgets/upload_overlay.dart';
import 'package:material_symbols_icons/material_symbols_icons.dart'; import 'package:material_symbols_icons/material_symbols_icons.dart';
import 'package:path_provider/path_provider.dart'; import 'package:path_provider/path_provider.dart';
@@ -364,6 +365,12 @@ class PopAction extends Action<PopIntent> {
@override @override
void invoke(PopIntent intent) { void invoke(PopIntent intent) {
// First, try to close any overlay dialogs
if (closeTopmostOverlayDialog()) {
return;
}
// If no overlay to close, pop the route
if (ref.watch(routerProvider).canPop()) { if (ref.watch(routerProvider).canPop()) {
ref.read(routerProvider).pop(); ref.read(routerProvider).pop();
} }

View File

@@ -15,6 +15,7 @@ class NetworkStatusSheet extends HookConsumerWidget {
final wsState = ref.watch(websocketStateProvider); final wsState = ref.watch(websocketStateProvider);
return SheetScaffold( return SheetScaffold(
heightFactor: 0.4,
titleText: titleText:
wsState == WebSocketState.connected() wsState == WebSocketState.connected()
? 'Connection Status' ? 'Connection Status'