diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml index 728c69538..934f20ae5 100644 --- a/android/app/src/main/AndroidManifest.xml +++ b/android/app/src/main/AndroidManifest.xml @@ -29,10 +29,11 @@ android:icon="@mipmap/ic_launcher" android:label="Bettbox" android:banner="@drawable/tv_banner" - android:enableOnBackInvokedCallback="true"> + android:enableOnBackInvokedCallback="false"> route.isFirst); + globalState.navigatorKey.currentState?.popUntil( + (route) => route.isFirst, + ); } toProfiles(); await addProfile(profile); @@ -1376,7 +1383,9 @@ class AppController { _ref.read(loadingProvider.notifier).value = true; try { await Future.delayed(const Duration(milliseconds: 500)); - final profile = await Profile.normal(label: platformFile?.name).saveFile(bytes); + final profile = await Profile.normal( + label: platformFile?.name, + ).saveFile(bytes); globalState.navigatorKey.currentState?.popUntil((route) => route.isFirst); toProfiles(); await addProfile(profile); @@ -1704,9 +1713,18 @@ class AppController { }); } - Future updateTray([bool focus = false, bool silent = false, bool force = false]) async { + Future updateTray([ + bool focus = false, + bool silent = false, + bool force = false, + ]) async { final trayState = _ref.read(trayStateProvider); - await tray.update(trayState: trayState, focus: focus, silent: silent, force: force); + await tray.update( + trayState: trayState, + focus: focus, + silent: silent, + force: force, + ); } Future _processRecoveryArchive( @@ -2244,7 +2262,9 @@ class AppController { // Use default widgets if merged is empty return mergedWidgets.isNotEmpty ? mergedWidgets - : (system.isAndroid ? defaultAndroidDashboardWidgets : defaultDashboardWidgets); + : (system.isAndroid + ? defaultAndroidDashboardWidgets + : defaultDashboardWidgets); } Future safeRun( diff --git a/lib/pages/home.dart b/lib/pages/home.dart index 35eb89dd4..df2f35c86 100644 --- a/lib/pages/home.dart +++ b/lib/pages/home.dart @@ -378,12 +378,15 @@ class HomeBackScope extends ConsumerWidget { globalState.appController.toPage(PageLabel.dashboard); return; } - final canPop = Navigator.canPop(context); - if (canPop) { - Navigator.pop(context); - } else { - await globalState.appController.handleBackOrExit(); + // Use the global navigator key rather than the local build + // context — the latter may become stale after display-mode + // changes on Xiaomi HyperOS (e.g. enabling "Show refresh rate"). + final navigatorState = globalState.navigatorKey.currentState; + if (navigatorState != null && navigatorState.canPop()) { + navigatorState.pop(); + return; } + await globalState.appController.handleBackOrExit(); }, child: child, ); diff --git a/lib/state.dart b/lib/state.dart index b6b06b1ec..eedcc0c3f 100644 --- a/lib/state.dart +++ b/lib/state.dart @@ -59,7 +59,6 @@ class GlobalState { bool _needsTaskRestart = false; Timer? _backgroundCleanupTimer; final Lock _scriptEvaluateLock = Lock(); - bool isInit = false; bool get isStart => startTime != null && startTime!.isBeforeNow;