mirror of
https://github.com/immich-app/immich.git
synced 2025-07-31 15:08:44 -04:00
fix: backup indicator in beta app bar (#20354)
fix: beta - app bar backup indicator Co-authored-by: shenlong-tanwen <139912620+shalong-tanwen@users.noreply.github.com>
This commit is contained in:
parent
c7fcb23a23
commit
1e1c2ea627
@ -8,6 +8,7 @@ enum Setting<T> {
|
|||||||
loadOriginalVideo<bool>(StoreKey.loadOriginalVideo, false),
|
loadOriginalVideo<bool>(StoreKey.loadOriginalVideo, false),
|
||||||
preferRemoteImage<bool>(StoreKey.preferRemoteImage, false),
|
preferRemoteImage<bool>(StoreKey.preferRemoteImage, false),
|
||||||
advancedTroubleshooting<bool>(StoreKey.advancedTroubleshooting, false),
|
advancedTroubleshooting<bool>(StoreKey.advancedTroubleshooting, false),
|
||||||
|
enableBackup<bool>(StoreKey.enableBackup, false),
|
||||||
;
|
;
|
||||||
|
|
||||||
const Setting(this.storeKey, this.defaultValue);
|
const Setting(this.storeKey, this.defaultValue);
|
||||||
|
@ -4,11 +4,12 @@ import 'package:flutter/foundation.dart';
|
|||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:flutter_svg/svg.dart';
|
import 'package:flutter_svg/svg.dart';
|
||||||
import 'package:hooks_riverpod/hooks_riverpod.dart';
|
import 'package:hooks_riverpod/hooks_riverpod.dart';
|
||||||
|
import 'package:immich_mobile/domain/models/setting.model.dart';
|
||||||
import 'package:immich_mobile/extensions/build_context_extensions.dart';
|
import 'package:immich_mobile/extensions/build_context_extensions.dart';
|
||||||
import 'package:immich_mobile/models/backup/backup_state.model.dart';
|
|
||||||
import 'package:immich_mobile/models/server_info/server_info.model.dart';
|
import 'package:immich_mobile/models/server_info/server_info.model.dart';
|
||||||
import 'package:immich_mobile/providers/backup/backup.provider.dart';
|
import 'package:immich_mobile/providers/backup/drift_backup.provider.dart';
|
||||||
import 'package:immich_mobile/providers/cast.provider.dart';
|
import 'package:immich_mobile/providers/cast.provider.dart';
|
||||||
|
import 'package:immich_mobile/providers/infrastructure/setting.provider.dart';
|
||||||
import 'package:immich_mobile/providers/server_info.provider.dart';
|
import 'package:immich_mobile/providers/server_info.provider.dart';
|
||||||
import 'package:immich_mobile/providers/sync_status.provider.dart';
|
import 'package:immich_mobile/providers/sync_status.provider.dart';
|
||||||
import 'package:immich_mobile/providers/timeline/multiselect.provider.dart';
|
import 'package:immich_mobile/providers/timeline/multiselect.provider.dart';
|
||||||
@ -238,43 +239,50 @@ class _BackupIndicator extends ConsumerWidget {
|
|||||||
}
|
}
|
||||||
|
|
||||||
Widget? _getBackupBadgeIcon(BuildContext context, WidgetRef ref) {
|
Widget? _getBackupBadgeIcon(BuildContext context, WidgetRef ref) {
|
||||||
final BackUpState backupState = ref.watch(backupProvider);
|
final backupStateStream = ref.watch(settingsProvider).watch(Setting.enableBackup);
|
||||||
final bool isEnableAutoBackup = backupState.backgroundBackup || backupState.autoBackup;
|
|
||||||
final isDarkTheme = context.isDarkTheme;
|
final isDarkTheme = context.isDarkTheme;
|
||||||
final iconColor = isDarkTheme ? Colors.white : Colors.black;
|
final iconColor = isDarkTheme ? Colors.white : Colors.black;
|
||||||
|
final isUploading = ref.watch(driftBackupProvider.select((state) => state.uploadItems.isNotEmpty));
|
||||||
|
|
||||||
|
return StreamBuilder(
|
||||||
|
stream: backupStateStream,
|
||||||
|
initialData: false,
|
||||||
|
builder: (ctx, snapshot) {
|
||||||
|
final backupEnabled = snapshot.data ?? false;
|
||||||
|
|
||||||
|
if (!backupEnabled) {
|
||||||
|
return Icon(
|
||||||
|
Icons.cloud_off_rounded,
|
||||||
|
size: 9,
|
||||||
|
color: iconColor,
|
||||||
|
semanticLabel: 'backup_controller_page_backup'.tr(),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (isUploading) {
|
||||||
|
return Container(
|
||||||
|
padding: const EdgeInsets.all(3.5),
|
||||||
|
child: Theme(
|
||||||
|
data: context.themeData
|
||||||
|
.copyWith(progressIndicatorTheme: context.themeData.progressIndicatorTheme.copyWith(year2023: true)),
|
||||||
|
child: CircularProgressIndicator(
|
||||||
|
strokeWidth: 2,
|
||||||
|
strokeCap: StrokeCap.round,
|
||||||
|
valueColor: AlwaysStoppedAnimation<Color>(iconColor),
|
||||||
|
semanticsLabel: 'backup_controller_page_backup'.tr(),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
if (isEnableAutoBackup) {
|
|
||||||
if (backupState.backupProgress == BackUpProgressEnum.inProgress) {
|
|
||||||
return Container(
|
|
||||||
padding: const EdgeInsets.all(3.5),
|
|
||||||
child: CircularProgressIndicator(
|
|
||||||
strokeWidth: 2,
|
|
||||||
strokeCap: StrokeCap.round,
|
|
||||||
valueColor: AlwaysStoppedAnimation<Color>(iconColor),
|
|
||||||
semanticsLabel: 'backup_controller_page_backup'.tr(),
|
|
||||||
),
|
|
||||||
);
|
|
||||||
} else if (backupState.backupProgress != BackUpProgressEnum.inBackground &&
|
|
||||||
backupState.backupProgress != BackUpProgressEnum.manualInProgress) {
|
|
||||||
return Icon(
|
return Icon(
|
||||||
Icons.check_outlined,
|
Icons.check_outlined,
|
||||||
size: 9,
|
size: 9,
|
||||||
color: iconColor,
|
color: iconColor,
|
||||||
semanticLabel: 'backup_controller_page_backup'.tr(),
|
semanticLabel: 'backup_controller_page_backup'.tr(),
|
||||||
);
|
);
|
||||||
}
|
},
|
||||||
}
|
);
|
||||||
|
|
||||||
if (!isEnableAutoBackup) {
|
|
||||||
return Icon(
|
|
||||||
Icons.cloud_off_rounded,
|
|
||||||
size: 9,
|
|
||||||
color: iconColor,
|
|
||||||
semanticLabel: 'backup_controller_page_backup'.tr(),
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
return null;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user