mirror of
https://github.com/immich-app/immich.git
synced 2025-08-11 09:16:31 -04:00
fix: don't show remove from album action from the main timeline (#20757)
* fix: don't show remove from album action from the main timeline * pr feedback
This commit is contained in:
parent
a896c5a4dd
commit
7b83b7b2d5
@ -10,6 +10,7 @@ import 'package:immich_mobile/presentation/widgets/bottom_sheet/remote_album_bot
|
|||||||
import 'package:immich_mobile/presentation/widgets/remote_album/drift_album_option.widget.dart';
|
import 'package:immich_mobile/presentation/widgets/remote_album/drift_album_option.widget.dart';
|
||||||
import 'package:immich_mobile/presentation/widgets/timeline/timeline.widget.dart';
|
import 'package:immich_mobile/presentation/widgets/timeline/timeline.widget.dart';
|
||||||
import 'package:immich_mobile/providers/infrastructure/album.provider.dart';
|
import 'package:immich_mobile/providers/infrastructure/album.provider.dart';
|
||||||
|
import 'package:immich_mobile/providers/infrastructure/current_album.provider.dart';
|
||||||
import 'package:immich_mobile/providers/infrastructure/remote_album.provider.dart';
|
import 'package:immich_mobile/providers/infrastructure/remote_album.provider.dart';
|
||||||
import 'package:immich_mobile/providers/infrastructure/timeline.provider.dart';
|
import 'package:immich_mobile/providers/infrastructure/timeline.provider.dart';
|
||||||
import 'package:immich_mobile/providers/user.provider.dart';
|
import 'package:immich_mobile/providers/user.provider.dart';
|
||||||
@ -215,22 +216,34 @@ class _RemoteAlbumPageState extends ConsumerState<RemoteAlbumPage> {
|
|||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
return ProviderScope(
|
return PopScope(
|
||||||
overrides: [
|
onPopInvokedWithResult: (didPop, _) {
|
||||||
timelineServiceProvider.overrideWith((ref) {
|
if (didPop) {
|
||||||
final timelineService = ref.watch(timelineFactoryProvider).remoteAlbum(albumId: _album.id);
|
Future.microtask(() {
|
||||||
ref.onDispose(timelineService.dispose);
|
if (mounted) {
|
||||||
return timelineService;
|
ref.read(currentRemoteAlbumProvider.notifier).dispose();
|
||||||
}),
|
ref.read(remoteAlbumProvider.notifier).refresh();
|
||||||
],
|
}
|
||||||
child: Timeline(
|
});
|
||||||
appBar: RemoteAlbumSliverAppBar(
|
}
|
||||||
icon: Icons.photo_album_outlined,
|
},
|
||||||
onShowOptions: () => showOptionSheet(context),
|
child: ProviderScope(
|
||||||
onToggleAlbumOrder: () => toggleAlbumOrder(),
|
overrides: [
|
||||||
onEditTitle: () => showEditTitleAndDescription(context),
|
timelineServiceProvider.overrideWith((ref) {
|
||||||
|
final timelineService = ref.watch(timelineFactoryProvider).remoteAlbum(albumId: _album.id);
|
||||||
|
ref.onDispose(timelineService.dispose);
|
||||||
|
return timelineService;
|
||||||
|
}),
|
||||||
|
],
|
||||||
|
child: Timeline(
|
||||||
|
appBar: RemoteAlbumSliverAppBar(
|
||||||
|
icon: Icons.photo_album_outlined,
|
||||||
|
onShowOptions: () => showOptionSheet(context),
|
||||||
|
onToggleAlbumOrder: () => toggleAlbumOrder(),
|
||||||
|
onEditTitle: () => showEditTitleAndDescription(context),
|
||||||
|
),
|
||||||
|
bottomSheet: RemoteAlbumBottomSheet(album: _album),
|
||||||
),
|
),
|
||||||
bottomSheet: RemoteAlbumBottomSheet(album: _album),
|
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
@ -31,5 +31,6 @@ class CurrentAlbumNotifier extends AutoDisposeNotifier<RemoteAlbum?> {
|
|||||||
void dispose() {
|
void dispose() {
|
||||||
_keepAliveLink?.close();
|
_keepAliveLink?.close();
|
||||||
_assetSubscription?.cancel();
|
_assetSubscription?.cancel();
|
||||||
|
state = null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -14,7 +14,6 @@ import 'package:immich_mobile/extensions/build_context_extensions.dart';
|
|||||||
import 'package:immich_mobile/extensions/datetime_extensions.dart';
|
import 'package:immich_mobile/extensions/datetime_extensions.dart';
|
||||||
import 'package:immich_mobile/extensions/translate_extensions.dart';
|
import 'package:immich_mobile/extensions/translate_extensions.dart';
|
||||||
import 'package:immich_mobile/presentation/widgets/images/image_provider.dart';
|
import 'package:immich_mobile/presentation/widgets/images/image_provider.dart';
|
||||||
import 'package:immich_mobile/providers/infrastructure/album.provider.dart';
|
|
||||||
import 'package:immich_mobile/providers/infrastructure/current_album.provider.dart';
|
import 'package:immich_mobile/providers/infrastructure/current_album.provider.dart';
|
||||||
import 'package:immich_mobile/providers/infrastructure/remote_album.provider.dart';
|
import 'package:immich_mobile/providers/infrastructure/remote_album.provider.dart';
|
||||||
import 'package:immich_mobile/providers/infrastructure/timeline.provider.dart';
|
import 'package:immich_mobile/providers/infrastructure/timeline.provider.dart';
|
||||||
@ -74,76 +73,75 @@ class _MesmerizingSliverAppBarState extends ConsumerState<RemoteAlbumSliverAppBa
|
|||||||
const Shadow(offset: Offset(0, 2), blurRadius: 0, color: Colors.transparent),
|
const Shadow(offset: Offset(0, 2), blurRadius: 0, color: Colors.transparent),
|
||||||
];
|
];
|
||||||
|
|
||||||
return isMultiSelectEnabled
|
if (isMultiSelectEnabled) {
|
||||||
? SliverToBoxAdapter(
|
return SliverToBoxAdapter(
|
||||||
child: switch (_scrollProgress) {
|
child: switch (_scrollProgress) {
|
||||||
< 0.8 => const SizedBox(height: 120),
|
< 0.8 => const SizedBox(height: 120),
|
||||||
_ => const SizedBox(height: 452),
|
_ => const SizedBox(height: 452),
|
||||||
},
|
},
|
||||||
)
|
);
|
||||||
: SliverAppBar(
|
} else {
|
||||||
expandedHeight: 400.0,
|
return SliverAppBar(
|
||||||
floating: false,
|
expandedHeight: 400.0,
|
||||||
pinned: true,
|
floating: false,
|
||||||
snap: false,
|
pinned: true,
|
||||||
elevation: 0,
|
snap: false,
|
||||||
leading: IconButton(
|
elevation: 0,
|
||||||
icon: Icon(
|
leading: IconButton(
|
||||||
Platform.isIOS ? Icons.arrow_back_ios_new_rounded : Icons.arrow_back,
|
icon: Icon(
|
||||||
color: actionIconColor,
|
Platform.isIOS ? Icons.arrow_back_ios_new_rounded : Icons.arrow_back,
|
||||||
shadows: actionIconShadows,
|
color: actionIconColor,
|
||||||
),
|
shadows: actionIconShadows,
|
||||||
onPressed: () {
|
),
|
||||||
ref.read(remoteAlbumProvider.notifier).refresh();
|
onPressed: () => context.navigateTo(const TabShellRoute(children: [DriftAlbumsRoute()])),
|
||||||
context.navigateTo(const TabShellRoute(children: [DriftAlbumsRoute()]));
|
),
|
||||||
},
|
actions: [
|
||||||
|
if (widget.onToggleAlbumOrder != null)
|
||||||
|
IconButton(
|
||||||
|
icon: Icon(Icons.swap_vert_rounded, color: actionIconColor, shadows: actionIconShadows),
|
||||||
|
onPressed: widget.onToggleAlbumOrder,
|
||||||
),
|
),
|
||||||
actions: [
|
if (widget.onShowOptions != null)
|
||||||
if (widget.onToggleAlbumOrder != null)
|
IconButton(
|
||||||
IconButton(
|
icon: Icon(Icons.more_vert, color: actionIconColor, shadows: actionIconShadows),
|
||||||
icon: Icon(Icons.swap_vert_rounded, color: actionIconColor, shadows: actionIconShadows),
|
onPressed: widget.onShowOptions,
|
||||||
onPressed: widget.onToggleAlbumOrder,
|
),
|
||||||
),
|
],
|
||||||
if (widget.onShowOptions != null)
|
flexibleSpace: Builder(
|
||||||
IconButton(
|
builder: (context) {
|
||||||
icon: Icon(Icons.more_vert, color: actionIconColor, shadows: actionIconShadows),
|
final settings = context.dependOnInheritedWidgetOfExactType<FlexibleSpaceBarSettings>();
|
||||||
onPressed: widget.onShowOptions,
|
final scrollProgress = _calculateScrollProgress(settings);
|
||||||
),
|
|
||||||
],
|
|
||||||
flexibleSpace: Builder(
|
|
||||||
builder: (context) {
|
|
||||||
final settings = context.dependOnInheritedWidgetOfExactType<FlexibleSpaceBarSettings>();
|
|
||||||
final scrollProgress = _calculateScrollProgress(settings);
|
|
||||||
|
|
||||||
// Update scroll progress for the leading button
|
// Update scroll progress for the leading button
|
||||||
WidgetsBinding.instance.addPostFrameCallback((_) {
|
WidgetsBinding.instance.addPostFrameCallback((_) {
|
||||||
if (mounted && _scrollProgress != scrollProgress) {
|
if (mounted && _scrollProgress != scrollProgress) {
|
||||||
setState(() {
|
setState(() {
|
||||||
_scrollProgress = scrollProgress;
|
_scrollProgress = scrollProgress;
|
||||||
});
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
return FlexibleSpaceBar(
|
return FlexibleSpaceBar(
|
||||||
centerTitle: true,
|
centerTitle: true,
|
||||||
title: AnimatedSwitcher(
|
title: AnimatedSwitcher(
|
||||||
duration: const Duration(milliseconds: 200),
|
duration: const Duration(milliseconds: 200),
|
||||||
child: scrollProgress > 0.95
|
child: scrollProgress > 0.95
|
||||||
? Text(
|
? Text(
|
||||||
currentAlbum.name,
|
currentAlbum.name,
|
||||||
style: TextStyle(color: context.primaryColor, fontWeight: FontWeight.w600, fontSize: 18),
|
style: TextStyle(color: context.primaryColor, fontWeight: FontWeight.w600, fontSize: 18),
|
||||||
)
|
)
|
||||||
: null,
|
: null,
|
||||||
),
|
),
|
||||||
background: _ExpandedBackground(
|
background: _ExpandedBackground(
|
||||||
scrollProgress: scrollProgress,
|
scrollProgress: scrollProgress,
|
||||||
icon: widget.icon,
|
icon: widget.icon,
|
||||||
onEditTitle: widget.onEditTitle,
|
onEditTitle: widget.onEditTitle,
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
},
|
},
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user