refactor: update global states to ValueNotifiers

This commit is contained in:
shenlong-tanwen 2024-10-18 09:19:39 +05:30
parent c91a2878dc
commit e8bb9a3934
7 changed files with 21 additions and 22 deletions

View File

@ -73,7 +73,7 @@ class LoginPageCubit extends Cubit<LoginPageState> with LogMixin {
ServiceLocator.registerPostGlobalStates(); ServiceLocator.registerPostGlobalStates();
// Fetch server features // Fetch server features
await di<ServerFeatureConfigCubit>().getFeatures(); await di<ServerFeatureConfigProvider>().getFeatures();
emit(state.copyWith(isServerValidated: true)); emit(state.copyWith(isServerValidated: true));
} finally { } finally {
@ -141,7 +141,7 @@ class LoginPageCubit extends Cubit<LoginPageState> with LogMixin {
await di<IUserRepository>().upsert(user); await di<IUserRepository>().upsert(user);
// Remove and Sync assets in background // Remove and Sync assets in background
await di<IAssetRepository>().deleteAll(); await di<IAssetRepository>().deleteAll();
await di<GalleryPermissionNotifier>().requestPermission(); await di<GalleryPermissionProvider>().requestPermission();
unawaited(di<AssetSyncService>().performFullRemoteSyncIsolate(user)); unawaited(di<AssetSyncService>().performFullRemoteSyncIsolate(user));
unawaited(di<AlbumSyncService>().performFullDeviceSyncIsolate()); unawaited(di<AlbumSyncService>().performFullDeviceSyncIsolate());

View File

@ -2,7 +2,6 @@ import 'dart:async';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:immich_mobile/domain/models/server-info/server_feature_config.model.dart';
import 'package:immich_mobile/i18n/strings.g.dart'; import 'package:immich_mobile/i18n/strings.g.dart';
import 'package:immich_mobile/presentation/components/common/gap.widget.dart'; import 'package:immich_mobile/presentation/components/common/gap.widget.dart';
import 'package:immich_mobile/presentation/components/common/loading_indicator.widget.dart'; import 'package:immich_mobile/presentation/components/common/loading_indicator.widget.dart';
@ -132,9 +131,9 @@ class _CredentialsFormState extends State<_CredentialsForm> {
selector: (model) => model.isValidationInProgress, selector: (model) => model.isValidationInProgress,
builder: (_, isValidationInProgress) => isValidationInProgress builder: (_, isValidationInProgress) => isValidationInProgress
? const ImLoadingIndicator() ? const ImLoadingIndicator()
: BlocBuilder<ServerFeatureConfigCubit, ServerFeatureConfig>( : ValueListenableBuilder(
bloc: di(), valueListenable: di<ServerFeatureConfigProvider>(),
builder: (_, state) => Column( builder: (_, state, __) => Column(
crossAxisAlignment: CrossAxisAlignment.stretch, crossAxisAlignment: CrossAxisAlignment.stretch,
mainAxisSize: MainAxisSize.min, mainAxisSize: MainAxisSize.min,
children: [ children: [

View File

@ -54,7 +54,7 @@ class _SplashScreenState extends State<SplashScreenPage>
Future<void> _tryLogin() async { Future<void> _tryLogin() async {
if (await di<LoginService>().tryAutoLogin() && mounted) { if (await di<LoginService>().tryAutoLogin() && mounted) {
unawaited(di<AssetSyncService>() unawaited(di<AssetSyncService>()
.performFullRemoteSyncIsolate(di<CurrentUserCubit>().state)); .performFullRemoteSyncIsolate(di<CurrentUserProvider>().value));
unawaited(di<AlbumSyncService>().performFullDeviceSyncIsolate()); unawaited(di<AlbumSyncService>().performFullDeviceSyncIsolate());
unawaited(context.replaceRoute(const TabControllerRoute())); unawaited(context.replaceRoute(const TabControllerRoute()));
} else { } else {

View File

@ -1,8 +1,8 @@
import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:flutter/foundation.dart';
import 'package:immich_mobile/domain/models/user.model.dart'; import 'package:immich_mobile/domain/models/user.model.dart';
class CurrentUserCubit extends Cubit<User> { class CurrentUserProvider extends ValueNotifier<User> {
CurrentUserCubit(super.initialState); CurrentUserProvider(super.initialState);
void updateUser(User user) => emit(user); void updateUser(User user) => value = user;
} }

View File

@ -15,8 +15,8 @@ enum GalleryPermissionStatus {
bool get isLimited => this == GalleryPermissionStatus.limited; bool get isLimited => this == GalleryPermissionStatus.limited;
} }
class GalleryPermissionNotifier extends ValueNotifier<GalleryPermissionStatus> { class GalleryPermissionProvider extends ValueNotifier<GalleryPermissionStatus> {
GalleryPermissionNotifier() : super(GalleryPermissionStatus.yetToRequest) { GalleryPermissionProvider() : super(GalleryPermissionStatus.yetToRequest) {
checkPermission(); checkPermission();
} }

View File

@ -1,11 +1,11 @@
import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:flutter/foundation.dart';
import 'package:immich_mobile/domain/models/server-info/server_feature_config.model.dart'; import 'package:immich_mobile/domain/models/server-info/server_feature_config.model.dart';
import 'package:immich_mobile/domain/services/server_info.service.dart'; import 'package:immich_mobile/domain/services/server_info.service.dart';
class ServerFeatureConfigCubit extends Cubit<ServerFeatureConfig> { class ServerFeatureConfigProvider extends ValueNotifier<ServerFeatureConfig> {
final ServerInfoService _serverInfoService; final ServerInfoService _serverInfoService;
ServerFeatureConfigCubit(this._serverInfoService) ServerFeatureConfigProvider(this._serverInfoService)
: super(const ServerFeatureConfig.reset()); : super(const ServerFeatureConfig.reset());
Future<void> getFeatures() async => Future<void> getFeatures() async =>
@ -14,14 +14,14 @@ class ServerFeatureConfigCubit extends Cubit<ServerFeatureConfig> {
Future<void> _getFeatures() async { Future<void> _getFeatures() async {
final features = await _serverInfoService.getServerFeatures(); final features = await _serverInfoService.getServerFeatures();
if (features != null) { if (features != null) {
emit(state.copyWith(features: features)); value = value.copyWith(features: features);
} }
} }
Future<void> _getConfig() async { Future<void> _getConfig() async {
final config = await _serverInfoService.getServerConfig(); final config = await _serverInfoService.getServerConfig();
if (config != null) { if (config != null) {
emit(state.copyWith(config: config)); value = value.copyWith(config: config);
} }
} }
} }

View File

@ -120,7 +120,7 @@ class ServiceLocator {
static void _registerPreGlobalStates() { static void _registerPreGlobalStates() {
_registerSingleton(AppRouter()); _registerSingleton(AppRouter());
_registerLazySingleton<AppThemeCubit>(() => AppThemeCubit(di())); _registerLazySingleton<AppThemeCubit>(() => AppThemeCubit(di()));
_registerSingleton(GalleryPermissionNotifier()); _registerSingleton(GalleryPermissionProvider());
} }
static void registerApiClient(String endpoint) { static void registerApiClient(String endpoint) {
@ -138,12 +138,12 @@ class ServiceLocator {
} }
static void registerPostGlobalStates() { static void registerPostGlobalStates() {
_registerLazySingleton<ServerFeatureConfigCubit>( _registerLazySingleton<ServerFeatureConfigProvider>(
() => ServerFeatureConfigCubit(di()), () => ServerFeatureConfigProvider(di()),
); );
} }
static void registerCurrentUser(User user) { static void registerCurrentUser(User user) {
_registerSingleton(CurrentUserCubit(user)); _registerSingleton(CurrentUserProvider(user));
} }
} }