mirror of
https://github.com/immich-app/immich.git
synced 2025-05-31 04:05:39 -04:00
fix(mobile): video player restarting when device rotates (#17362)
* fix(mobile): Video player restarting when device rotates * use global key in state * Implement suggestions from code review
This commit is contained in:
parent
99cddf1fd6
commit
1e4b9ae5b7
@ -12,8 +12,8 @@ import 'package:immich_mobile/entities/asset.entity.dart';
|
|||||||
import 'package:immich_mobile/extensions/build_context_extensions.dart';
|
import 'package:immich_mobile/extensions/build_context_extensions.dart';
|
||||||
import 'package:immich_mobile/extensions/scroll_extensions.dart';
|
import 'package:immich_mobile/extensions/scroll_extensions.dart';
|
||||||
import 'package:immich_mobile/pages/common/download_panel.dart';
|
import 'package:immich_mobile/pages/common/download_panel.dart';
|
||||||
import 'package:immich_mobile/pages/common/native_video_viewer.page.dart';
|
|
||||||
import 'package:immich_mobile/pages/common/gallery_stacked_children.dart';
|
import 'package:immich_mobile/pages/common/gallery_stacked_children.dart';
|
||||||
|
import 'package:immich_mobile/pages/common/native_video_viewer.page.dart';
|
||||||
import 'package:immich_mobile/providers/app_settings.provider.dart';
|
import 'package:immich_mobile/providers/app_settings.provider.dart';
|
||||||
import 'package:immich_mobile/providers/asset_viewer/asset_stack.provider.dart';
|
import 'package:immich_mobile/providers/asset_viewer/asset_stack.provider.dart';
|
||||||
import 'package:immich_mobile/providers/asset_viewer/current_asset.provider.dart';
|
import 'package:immich_mobile/providers/asset_viewer/current_asset.provider.dart';
|
||||||
@ -63,6 +63,10 @@ class GalleryViewerPage extends HookConsumerWidget {
|
|||||||
final loadAsset = renderList.loadAsset;
|
final loadAsset = renderList.loadAsset;
|
||||||
final isPlayingMotionVideo = ref.watch(isPlayingMotionVideoProvider);
|
final isPlayingMotionVideo = ref.watch(isPlayingMotionVideoProvider);
|
||||||
|
|
||||||
|
// This key is to prevent the video player from being re-initialized during
|
||||||
|
// hero animation or device rotation.
|
||||||
|
final videoPlayerKey = useMemoized(() => GlobalKey());
|
||||||
|
|
||||||
Future<void> precacheNextImage(int index) async {
|
Future<void> precacheNextImage(int index) async {
|
||||||
if (!context.mounted) {
|
if (!context.mounted) {
|
||||||
return;
|
return;
|
||||||
@ -225,8 +229,6 @@ class GalleryViewerPage extends HookConsumerWidget {
|
|||||||
}
|
}
|
||||||
|
|
||||||
PhotoViewGalleryPageOptions buildVideo(BuildContext context, Asset asset) {
|
PhotoViewGalleryPageOptions buildVideo(BuildContext context, Asset asset) {
|
||||||
// This key is to prevent the video player from being re-initialized during the hero animation
|
|
||||||
final key = GlobalKey();
|
|
||||||
return PhotoViewGalleryPageOptions.customChild(
|
return PhotoViewGalleryPageOptions.customChild(
|
||||||
onDragStart: (_, details, __) =>
|
onDragStart: (_, details, __) =>
|
||||||
localPosition.value = details.localPosition,
|
localPosition.value = details.localPosition,
|
||||||
@ -241,7 +243,7 @@ class GalleryViewerPage extends HookConsumerWidget {
|
|||||||
width: context.width,
|
width: context.width,
|
||||||
height: context.height,
|
height: context.height,
|
||||||
child: NativeVideoViewerPage(
|
child: NativeVideoViewerPage(
|
||||||
key: key,
|
key: videoPlayerKey,
|
||||||
asset: asset,
|
asset: asset,
|
||||||
image: Image(
|
image: Image(
|
||||||
key: ValueKey(asset),
|
key: ValueKey(asset),
|
||||||
|
Loading…
x
Reference in New Issue
Block a user