mirror of
https://github.com/immich-app/immich.git
synced 2026-05-18 03:10:24 +03:00
feat(mobile): init of add quick action configurator and settings for viewer actions
This commit is contained in:
@@ -0,0 +1,50 @@
|
||||
import 'dart:async';
|
||||
import 'package:flutter/foundation.dart';
|
||||
import 'package:immich_mobile/providers/app_settings.provider.dart';
|
||||
import 'package:immich_mobile/utils/action_button.utils.dart';
|
||||
import 'package:riverpod_annotation/riverpod_annotation.dart';
|
||||
|
||||
part 'viewer_quick_action_order.provider.g.dart';
|
||||
|
||||
@Riverpod(keepAlive: true)
|
||||
class ViewerQuickActionOrder extends _$ViewerQuickActionOrder {
|
||||
StreamSubscription<List<ActionButtonType>>? _subscription;
|
||||
|
||||
@override
|
||||
List<ActionButtonType> build() {
|
||||
final service = ref.watch(appSettingsServiceProvider);
|
||||
final initial = ActionButtonBuilder.normalizeQuickActionOrder(service.getViewerQuickActionOrder());
|
||||
|
||||
_subscription ??= service.watchViewerQuickActionOrder().listen((order) {
|
||||
state = ActionButtonBuilder.normalizeQuickActionOrder(order);
|
||||
});
|
||||
|
||||
ref.onDispose(() {
|
||||
_subscription?.cancel();
|
||||
_subscription = null;
|
||||
});
|
||||
|
||||
return initial;
|
||||
}
|
||||
|
||||
Future<void> setOrder(List<ActionButtonType> order) async {
|
||||
final normalized = ActionButtonBuilder.normalizeQuickActionOrder(order);
|
||||
|
||||
if (listEquals(state, normalized)) {
|
||||
return;
|
||||
}
|
||||
|
||||
final previous = state;
|
||||
state = normalized;
|
||||
|
||||
try {
|
||||
await ref.read(appSettingsServiceProvider).setViewerQuickActionOrder(normalized);
|
||||
} catch (error) {
|
||||
state = previous;
|
||||
rethrow;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// Mock class for testing
|
||||
abstract class ViewerQuickActionOrderInternal extends _$ViewerQuickActionOrder {}
|
||||
+27
@@ -0,0 +1,27 @@
|
||||
// GENERATED CODE - DO NOT MODIFY BY HAND
|
||||
|
||||
part of 'viewer_quick_action_order.provider.dart';
|
||||
|
||||
// **************************************************************************
|
||||
// RiverpodGenerator
|
||||
// **************************************************************************
|
||||
|
||||
String _$viewerQuickActionOrderHash() =>
|
||||
r'd539bc6ba5fae4fa07a7c30c42d9f6aee1488f97';
|
||||
|
||||
/// See also [ViewerQuickActionOrder].
|
||||
@ProviderFor(ViewerQuickActionOrder)
|
||||
final viewerQuickActionOrderProvider =
|
||||
NotifierProvider<ViewerQuickActionOrder, List<ActionButtonType>>.internal(
|
||||
ViewerQuickActionOrder.new,
|
||||
name: r'viewerQuickActionOrderProvider',
|
||||
debugGetCreateSourceHash: const bool.fromEnvironment('dart.vm.product')
|
||||
? null
|
||||
: _$viewerQuickActionOrderHash,
|
||||
dependencies: null,
|
||||
allTransitiveDependencies: null,
|
||||
);
|
||||
|
||||
typedef _$ViewerQuickActionOrder = Notifier<List<ActionButtonType>>;
|
||||
// ignore_for_file: type=lint
|
||||
// ignore_for_file: subtype_of_sealed_class, invalid_use_of_internal_member, invalid_use_of_visible_for_testing_member, deprecated_member_use_from_same_package
|
||||
Reference in New Issue
Block a user