Files
plezy/lib/services/app_exit_service.dart
T
edde746 6df8aba097 fix(nav): preserve HTPC escape behavior
Use Flutter's supported desktop application-exit API so the second root Back press closes Plezy on Windows. Preserve fullscreen when video player navigation is enabled while keeping fullscreen-first Escape behavior for normal desktop use.

close #1582
2026-07-16 20:43:10 +02:00

45 lines
1.5 KiB
Dart

import 'dart:io' show Platform;
import 'dart:ui' as ui;
import 'package:flutter/services.dart';
import '../utils/platform_detector.dart';
typedef AppExitApplication = Future<ui.AppExitResponse> Function(ui.AppExitType exitType, int exitCode);
class AppExitService {
static const bool _tvosBuild = bool.fromEnvironment('TVOS_BUILD');
static const MethodChannel _channel = MethodChannel('com.plezy/app_exit');
/// Requests that the host platform closes or backgrounds the app.
///
/// tvOS has no public API for force-quitting or going Home, so callers that
/// handle a physical back/Menu key should let the event continue instead.
static Future<bool> requestExit({AppExitApplication? exitApplicationForTesting}) async {
if (_tvosBuild || PlatformDetector.isAppleTV()) return false;
if (Platform.isAndroid) {
try {
return await _channel.invokeMethod<bool>('requestExit') ?? true;
} on MissingPluginException {
await SystemNavigator.pop();
return true;
} on PlatformException {
await SystemNavigator.pop();
return true;
}
}
if (PlatformDetector.isDesktopOS()) {
final exitApplication =
exitApplicationForTesting ??
(exitType, exitCode) => ServicesBinding.instance.exitApplication(exitType, exitCode);
final response = await exitApplication(ui.AppExitType.required, 0);
return response == ui.AppExitResponse.exit;
}
await SystemNavigator.pop();
return true;
}
}