Skip to content

Commit 9f3eeed

Browse files
fix(mobile): first video memory on page doesn't play (#23906)
* fix(mobile): first video memory doesn't play * refactor: moved logic to static method * refactor: fix haptic feedback & empty check * refactor: use DriftMemory on setMemory * refactor: move video reset into if block
1 parent 1dbc20f commit 9f3eeed

File tree

2 files changed

+16
-10
lines changed

2 files changed

+16
-10
lines changed

mobile/lib/presentation/pages/drift_memory.page.dart

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,16 @@ class DriftMemoryPage extends HookConsumerWidget {
2424

2525
const DriftMemoryPage({required this.memories, required this.memoryIndex, super.key});
2626

27+
static void setMemory(WidgetRef ref, DriftMemory memory) {
28+
if (memory.assets.isNotEmpty) {
29+
ref.read(currentAssetNotifier.notifier).setAsset(memory.assets.first);
30+
31+
if (memory.assets.first.isVideo) {
32+
ref.read(videoPlaybackValueProvider.notifier).reset();
33+
}
34+
}
35+
}
36+
2737
@override
2838
Widget build(BuildContext context, WidgetRef ref) {
2939
final currentMemory = useState(memories[memoryIndex]);
@@ -202,6 +212,10 @@ class DriftMemoryPage extends HookConsumerWidget {
202212
if (pageNumber < memories.length) {
203213
currentMemoryIndex.value = pageNumber;
204214
currentMemory.value = memories[pageNumber];
215+
216+
WidgetsBinding.instance.addPostFrameCallback((_) {
217+
DriftMemoryPage.setMemory(ref, memories[pageNumber]);
218+
});
205219
}
206220

207221
currentAssetPage.value = 0;

mobile/lib/presentation/widgets/memory/memory_lane.widget.dart

Lines changed: 2 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,9 @@ import 'package:flutter/material.dart';
33
import 'package:hooks_riverpod/hooks_riverpod.dart';
44
import 'package:immich_mobile/domain/models/memory.model.dart';
55
import 'package:immich_mobile/extensions/translate_extensions.dart';
6+
import 'package:immich_mobile/presentation/pages/drift_memory.page.dart';
67
import 'package:immich_mobile/presentation/widgets/images/thumbnail.widget.dart';
7-
import 'package:immich_mobile/providers/asset_viewer/video_player_value_provider.dart';
88
import 'package:immich_mobile/providers/haptic_feedback.provider.dart';
9-
import 'package:immich_mobile/providers/infrastructure/asset_viewer/current_asset.provider.dart';
109
import 'package:immich_mobile/providers/infrastructure/memory.provider.dart';
1110
import 'package:immich_mobile/routing/router.dart';
1211

@@ -31,16 +30,9 @@ class DriftMemoryLane extends ConsumerWidget {
3130
overlayColor: WidgetStateProperty.all(Colors.white.withValues(alpha: 0.1)),
3231
onTap: (index) {
3332
ref.read(hapticFeedbackProvider.notifier).heavyImpact();
34-
3533
if (memories[index].assets.isNotEmpty) {
36-
final asset = memories[index].assets[0];
37-
ref.read(currentAssetNotifier.notifier).setAsset(asset);
38-
39-
if (asset.isVideo) {
40-
ref.read(videoPlaybackValueProvider.notifier).reset();
41-
}
34+
DriftMemoryPage.setMemory(ref, memories[index]);
4235
}
43-
4436
context.pushRoute(DriftMemoryRoute(memories: memories, memoryIndex: index));
4537
},
4638
children: memories

0 commit comments

Comments
 (0)