chore: realized I could just pull from the timelineProvider instead of storing it in the asset viewer state

This commit is contained in:
bwees 2025-10-13 00:34:37 -05:00
parent 268867353b
commit b397538478
No known key found for this signature in database
5 changed files with 7 additions and 21 deletions

View file

@ -61,9 +61,8 @@ class AssetViewer extends ConsumerStatefulWidget {
@override
ConsumerState createState() => _AssetViewerState();
static void setAsset(WidgetRef ref, BaseAsset asset, TimelineType timelineType) {
static void setAsset(WidgetRef ref, BaseAsset asset) {
ref.read(assetViewerProvider.notifier).reset();
ref.read(assetViewerProvider.notifier).setTimelineType(timelineType);
_setAsset(ref, asset);
}

View file

@ -1,5 +1,4 @@
import 'package:immich_mobile/domain/models/asset/base_asset.model.dart';
import 'package:immich_mobile/domain/services/timeline.service.dart';
import 'package:immich_mobile/domain/utils/event_stream.dart';
import 'package:immich_mobile/providers/asset_viewer/video_player_controls_provider.dart';
import 'package:riverpod_annotation/riverpod_annotation.dart';
@ -18,7 +17,6 @@ class AssetViewerState {
final bool showingControls;
final BaseAsset? currentAsset;
final int stackIndex;
final TimelineType timelineType;
const AssetViewerState({
this.backgroundOpacity = 255,
@ -26,7 +24,6 @@ class AssetViewerState {
this.showingControls = true,
this.currentAsset,
this.stackIndex = 0,
this.timelineType = TimelineType.main,
});
AssetViewerState copyWith({
@ -35,7 +32,6 @@ class AssetViewerState {
bool? showingControls,
BaseAsset? currentAsset,
int? stackIndex,
TimelineType? timelineType,
}) {
return AssetViewerState(
backgroundOpacity: backgroundOpacity ?? this.backgroundOpacity,
@ -43,7 +39,6 @@ class AssetViewerState {
showingControls: showingControls ?? this.showingControls,
currentAsset: currentAsset ?? this.currentAsset,
stackIndex: stackIndex ?? this.stackIndex,
timelineType: timelineType ?? this.timelineType,
);
}
@ -124,13 +119,6 @@ class AssetViewerStateNotifier extends Notifier<AssetViewerState> {
}
state = state.copyWith(stackIndex: index);
}
void setTimelineType(TimelineType type) {
if (type == state.timelineType) {
return;
}
state = state.copyWith(timelineType: type);
}
}
final assetViewerProvider = NotifierProvider<AssetViewerStateNotifier, AssetViewerState>(AssetViewerStateNotifier.new);

View file

@ -18,6 +18,7 @@ import 'package:immich_mobile/providers/cast.provider.dart';
import 'package:immich_mobile/providers/infrastructure/asset_viewer/current_asset.provider.dart';
import 'package:immich_mobile/providers/infrastructure/current_album.provider.dart';
import 'package:immich_mobile/providers/infrastructure/readonly_mode.provider.dart';
import 'package:immich_mobile/providers/infrastructure/timeline.provider.dart';
import 'package:immich_mobile/providers/routes.provider.dart';
import 'package:immich_mobile/providers/user.provider.dart';
import 'package:immich_mobile/routing/router.dart';
@ -39,7 +40,7 @@ class ViewerTopAppBar extends ConsumerWidget implements PreferredSizeWidget {
final isInLockedView = ref.watch(inLockedViewProvider);
final isReadonlyModeEnabled = ref.watch(readonlyModeProvider);
final timelineType = ref.read(assetViewerProvider).timelineType;
final timelineType = ref.read(timelineServiceProvider).type;
final showViewInTimelineButton =
timelineType != TimelineType.main &&
timelineType != TimelineType.deepLink &&

View file

@ -15,8 +15,8 @@ import 'package:immich_mobile/presentation/widgets/timeline/timeline.state.dart'
import 'package:immich_mobile/presentation/widgets/timeline/timeline_drag_region.dart';
import 'package:immich_mobile/providers/asset_viewer/is_motion_video_playing.provider.dart';
import 'package:immich_mobile/providers/haptic_feedback.provider.dart';
import 'package:immich_mobile/providers/infrastructure/readonly_mode.provider.dart';
import 'package:immich_mobile/providers/infrastructure/timeline.provider.dart';
import 'package:immich_mobile/providers/infrastructure/readonly_mode.provider.dart';
import 'package:immich_mobile/providers/timeline/multiselect.provider.dart';
import 'package:immich_mobile/routing/router.dart';
@ -134,7 +134,6 @@ class _FixedSegmentRow extends ConsumerWidget {
key: ValueKey(Object.hash(assets[i].heroTag, assetIndex + i, timelineService.hashCode)),
asset: assets[i],
assetIndex: assetIndex + i,
timelineType: timelineService.type,
),
),
],
@ -145,9 +144,8 @@ class _FixedSegmentRow extends ConsumerWidget {
class _AssetTileWidget extends ConsumerWidget {
final BaseAsset asset;
final int assetIndex;
final TimelineType timelineType;
const _AssetTileWidget({super.key, required this.asset, required this.assetIndex, required this.timelineType});
const _AssetTileWidget({super.key, required this.asset, required this.assetIndex});
Future _handleOnTap(BuildContext ctx, WidgetRef ref, int assetIndex, BaseAsset asset, int? heroOffset) async {
final multiSelectState = ref.read(multiSelectProvider);
@ -157,7 +155,7 @@ class _AssetTileWidget extends ConsumerWidget {
} else {
await ref.read(timelineServiceProvider).loadAssets(assetIndex, 1);
ref.read(isPlayingMotionVideoProvider.notifier).playing = false;
AssetViewer.setAsset(ref, asset, timelineType);
AssetViewer.setAsset(ref, asset);
ctx.pushRoute(
AssetViewerRoute(
initialIndex: assetIndex,

View file

@ -149,7 +149,7 @@ class DeepLinkService {
return null;
}
AssetViewer.setAsset(ref, asset, TimelineType.deepLink);
AssetViewer.setAsset(ref, asset);
return AssetViewerRoute(
initialIndex: 0,
timelineService: _betaTimelineFactory.fromAssets([asset], TimelineType.deepLink),