mirror of
https://github.com/immich-app/immich.git
synced 2025-09-29 15:31:13 -04:00
* chore: refresh backup stats when entering backup page * check for success status * remove logs * remove sync remote when toggle the button * show status immediately after navigating to screen * pr feedback
106 lines
3.6 KiB
Dart
106 lines
3.6 KiB
Dart
import 'package:easy_localization/easy_localization.dart';
|
|
import 'package:flutter/material.dart';
|
|
import 'package:immich_mobile/extensions/build_context_extensions.dart';
|
|
import 'package:immich_mobile/extensions/theme_extensions.dart';
|
|
import 'package:immich_mobile/extensions/translate_extensions.dart';
|
|
|
|
class BackupInfoCard extends StatelessWidget {
|
|
final String title;
|
|
final String subtitle;
|
|
final String info;
|
|
|
|
final VoidCallback? onTap;
|
|
final bool isLoading;
|
|
const BackupInfoCard({
|
|
super.key,
|
|
required this.title,
|
|
required this.subtitle,
|
|
required this.info,
|
|
this.onTap,
|
|
this.isLoading = false,
|
|
});
|
|
|
|
@override
|
|
Widget build(BuildContext context) {
|
|
return Card(
|
|
shape: RoundedRectangleBorder(
|
|
borderRadius: const BorderRadius.all(
|
|
Radius.circular(20), // if you need this
|
|
),
|
|
side: BorderSide(color: context.colorScheme.outlineVariant, width: 1),
|
|
),
|
|
elevation: 0,
|
|
borderOnForeground: false,
|
|
child: Column(
|
|
children: [
|
|
ListTile(
|
|
minVerticalPadding: 18,
|
|
isThreeLine: true,
|
|
title: Text(title, style: context.textTheme.titleMedium),
|
|
subtitle: Padding(
|
|
padding: const EdgeInsets.only(top: 4.0, right: 18.0),
|
|
child: Text(
|
|
subtitle,
|
|
style: context.textTheme.bodyMedium?.copyWith(color: context.colorScheme.onSurfaceSecondary),
|
|
),
|
|
),
|
|
trailing: Column(
|
|
mainAxisAlignment: MainAxisAlignment.center,
|
|
children: [
|
|
Stack(
|
|
children: [
|
|
Text(
|
|
info,
|
|
style: context.textTheme.titleLarge?.copyWith(
|
|
color: context.colorScheme.onSurface.withAlpha(isLoading ? 50 : 255),
|
|
),
|
|
),
|
|
if (isLoading)
|
|
Positioned.fill(
|
|
child: Align(
|
|
alignment: Alignment.center,
|
|
child: SizedBox(
|
|
width: 16,
|
|
height: 16,
|
|
child: CircularProgressIndicator(
|
|
strokeWidth: 2,
|
|
color: context.colorScheme.onSurface.withAlpha(150),
|
|
),
|
|
),
|
|
),
|
|
),
|
|
],
|
|
),
|
|
Text(
|
|
"backup_info_card_assets",
|
|
style: context.textTheme.labelLarge?.copyWith(
|
|
color: context.colorScheme.onSurface.withAlpha(isLoading ? 50 : 255),
|
|
),
|
|
).tr(),
|
|
],
|
|
),
|
|
),
|
|
|
|
if (onTap != null) ...[
|
|
const Divider(height: 0),
|
|
ListTile(
|
|
enableFeedback: true,
|
|
visualDensity: VisualDensity.compact,
|
|
contentPadding: const EdgeInsets.symmetric(horizontal: 16.0, vertical: 0.0),
|
|
shape: const RoundedRectangleBorder(
|
|
borderRadius: BorderRadius.only(bottomLeft: Radius.circular(20), bottomRight: Radius.circular(20)),
|
|
),
|
|
onTap: onTap,
|
|
title: Text(
|
|
"view_details".t(context: context),
|
|
style: context.textTheme.labelLarge?.copyWith(color: context.colorScheme.onSurface.withAlpha(200)),
|
|
),
|
|
trailing: Icon(Icons.arrow_forward_ios, size: 16, color: context.colorScheme.onSurfaceVariant),
|
|
),
|
|
],
|
|
],
|
|
),
|
|
);
|
|
}
|
|
}
|