Skip to content

Commit 1fc5da3

Browse files
authored
fix(mobile): Hide system UI when entering immersive mode in asset viewer (#21539)
Implement hiding system ui in asset viewer
1 parent 4d84338 commit 1fc5da3

File tree

1 file changed

+12
-0
lines changed

1 file changed

+12
-0
lines changed

mobile/lib/presentation/widgets/asset_viewer/asset_viewer.page.dart

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ import 'dart:async';
33
import 'package:auto_route/auto_route.dart';
44
import 'package:easy_localization/easy_localization.dart';
55
import 'package:flutter/material.dart';
6+
import 'package:flutter/services.dart';
67
import 'package:hooks_riverpod/hooks_riverpod.dart';
78
import 'package:immich_mobile/domain/models/asset/base_asset.model.dart';
89
import 'package:immich_mobile/domain/models/timeline.model.dart';
@@ -129,6 +130,7 @@ class _AssetViewerState extends ConsumerState<AssetViewer> {
129130
reloadSubscription?.cancel();
130131
_prevPreCacheStream?.removeListener(_dummyListener);
131132
_nextPreCacheStream?.removeListener(_dummyListener);
133+
SystemChrome.setEnabledSystemUIMode(SystemUiMode.edgeToEdge);
132134
super.dispose();
133135
}
134136

@@ -596,6 +598,7 @@ class _AssetViewerState extends ConsumerState<AssetViewer> {
596598
// Rebuild the widget when the asset viewer state changes
597599
// Using multiple selectors to avoid unnecessary rebuilds for other state changes
598600
ref.watch(assetViewerProvider.select((s) => s.showingBottomSheet));
601+
ref.watch(assetViewerProvider.select((s) => s.showingControls));
599602
ref.watch(assetViewerProvider.select((s) => s.backgroundOpacity));
600603
ref.watch(assetViewerProvider.select((s) => s.stackIndex));
601604
ref.watch(isPlayingMotionVideoProvider);
@@ -612,6 +615,15 @@ class _AssetViewerState extends ConsumerState<AssetViewer> {
612615
});
613616
});
614617

618+
// Listen for control visibility changes and change system UI mode accordingly
619+
ref.listen(assetViewerProvider.select((value) => value.showingControls), (_, showingControls) async {
620+
if (showingControls) {
621+
SystemChrome.setEnabledSystemUIMode(SystemUiMode.edgeToEdge);
622+
} else {
623+
SystemChrome.setEnabledSystemUIMode(SystemUiMode.immersiveSticky);
624+
}
625+
});
626+
615627
// Currently it is not possible to scroll the asset when the bottom sheet is open all the way.
616628
// Issue: https://github.com/flutter/flutter/issues/109037
617629
// TODO: Add a custom scrum builder once the fix lands on stable

0 commit comments

Comments
 (0)