forked from Cutlery/immich
677cb660f5
Sometimes the current asset won't update when deleted, or it won't refresh until an event (like showing details) happens.
60 lines
2.3 KiB
Dart
60 lines
2.3 KiB
Dart
// dart
|
|
// File: `lib/presentation/widgets/action_buttons/unarchive_action_button.widget.dart`
|
|
import 'package:flutter/material.dart';
|
|
import 'package:fluttertoast/fluttertoast.dart';
|
|
import 'package:hooks_riverpod/hooks_riverpod.dart';
|
|
import 'package:immich_mobile/constants/enums.dart';
|
|
import 'package:immich_mobile/extensions/translate_extensions.dart';
|
|
import 'package:immich_mobile/presentation/widgets/action_buttons/base_action_button.widget.dart';
|
|
import 'package:immich_mobile/providers/infrastructure/action.provider.dart';
|
|
import 'package:immich_mobile/providers/timeline/multiselect.provider.dart';
|
|
import 'package:immich_mobile/widgets/common/immich_toast.dart';
|
|
import 'package:immich_mobile/domain/models/events.model.dart';
|
|
import 'package:immich_mobile/domain/utils/event_stream.dart';
|
|
|
|
// used to allow performing unarchive action from different sources (without duplicating code)
|
|
Future<void> performUnArchiveAction(BuildContext context, WidgetRef ref, {required ActionSource source}) async {
|
|
if (!context.mounted) return;
|
|
|
|
if (source == ActionSource.viewer) {
|
|
EventStream.shared.emit(const ViewerReloadAssetEvent());
|
|
}
|
|
|
|
final result = await ref.read(actionProvider.notifier).unArchive(source);
|
|
ref.read(multiSelectProvider.notifier).reset();
|
|
|
|
final successMessage = 'unarchive_action_prompt'.t(context: context, args: {'count': result.count.toString()});
|
|
|
|
if (context.mounted) {
|
|
ImmichToast.show(
|
|
context: context,
|
|
msg: result.success ? successMessage : 'scaffold_body_error_occurred'.t(context: context),
|
|
gravity: ToastGravity.BOTTOM,
|
|
toastType: result.success ? ToastType.success : ToastType.error,
|
|
);
|
|
}
|
|
}
|
|
|
|
class UnArchiveActionButton extends ConsumerWidget {
|
|
final ActionSource source;
|
|
final bool iconOnly;
|
|
final bool menuItem;
|
|
|
|
const UnArchiveActionButton({super.key, required this.source, this.iconOnly = false, this.menuItem = false});
|
|
|
|
Future<void> _onTap(BuildContext context, WidgetRef ref) async {
|
|
await performUnArchiveAction(context, ref, source: source);
|
|
}
|
|
|
|
@override
|
|
Widget build(BuildContext context, WidgetRef ref) {
|
|
return BaseActionButton(
|
|
iconData: Icons.unarchive_outlined,
|
|
label: "unarchive".t(context: context),
|
|
iconOnly: iconOnly,
|
|
menuItem: menuItem,
|
|
onPressed: () => _onTap(context, ref),
|
|
);
|
|
}
|
|
}
|