fix(ui): make download file deletion explicit in task dialog (#1622) (#1638)

This commit is contained in:
Codess
2026-11-03 09:27:30 +08:00
committed by GitHub
parent d69874e13e
commit ebfd113360
29 changed files with 44 additions and 39 deletions
@@ -222,7 +222,7 @@ class ExtraConfig {
this.themeMode = '',
this.themeColor = 'green',
this.locale = '',
this.lastDeleteTaskKeep = false,
this.lastDeleteTaskKeep = true,
this.defaultDirectDownload = false,
this.defaultBtClient = true,
this.notifyWhenNewVersion = true,
@@ -186,7 +186,7 @@ ExtraConfig _$ExtraConfigFromJson(Map<String, dynamic> json) => ExtraConfig(
themeMode: json['themeMode'] as String? ?? '',
themeColor: json['themeColor'] as String? ?? 'green',
locale: json['locale'] as String? ?? '',
lastDeleteTaskKeep: json['lastDeleteTaskKeep'] as bool? ?? false,
lastDeleteTaskKeep: json['lastDeleteTaskKeep'] as bool? ?? true,
defaultDirectDownload: json['defaultDirectDownload'] as bool? ?? false,
defaultBtClient: json['defaultBtClient'] as bool? ?? true,
notifyWhenNewVersion: json['notifyWhenNewVersion'] as bool? ?? true,
@@ -541,7 +541,7 @@ class _HomePageState extends ConsumerState<HomePage> {
fileCount: !hasGroups
? null
: selected.fold<int>(0, (total, task) => total + (task.files.isEmpty ? 1 : task.files.length)),
keepFiles: config?.extra.lastDeleteTaskKeep ?? false,
keepFiles: config?.extra.lastDeleteTaskKeep ?? true,
);
if (keepFiles == null || !mounted) return;
@@ -12,7 +12,7 @@ Future<bool?> showTaskDeleteDialog(
int? memberCount,
int? fileCount,
}) async {
var currentKeepFiles = keepFiles;
var deleteFiles = !keepFiles;
final dialog = const DialogOverlayHandler().show<bool>(
context: context,
alignment: Alignment.center,
@@ -47,16 +47,16 @@ Future<bool?> showTaskDeleteDialog(
const SizedBox(height: AppDesignTokens.space16),
],
AnimatedContainer(
key: const ValueKey('task-delete-keep-files-option'),
key: const ValueKey('task-delete-files-option'),
duration: const Duration(milliseconds: 160),
padding: const EdgeInsets.symmetric(
horizontal: AppDesignTokens.space16,
vertical: AppDesignTokens.space12,
),
decoration: BoxDecoration(
color: currentKeepFiles ? palette.brandSoft : palette.surfaceSoft,
color: deleteFiles ? palette.error.withValues(alpha: 0.08) : palette.surfaceSoft,
border: Border.all(
color: currentKeepFiles ? palette.brand.withValues(alpha: 0.45) : palette.border,
color: deleteFiles ? palette.error.withValues(alpha: 0.35) : palette.border,
),
borderRadius: BorderRadius.circular(8),
),
@@ -70,9 +70,9 @@ Future<bool?> showTaskDeleteDialog(
),
const SizedBox(width: AppDesignTokens.space16),
Switch(
key: const ValueKey('task-delete-keep-files-switch'),
value: currentKeepFiles,
onChanged: (value) => setDialogState(() => currentKeepFiles = value),
key: const ValueKey('task-delete-files-switch'),
value: deleteFiles,
onChanged: (value) => setDialogState(() => deleteFiles = value),
),
],
),
@@ -83,7 +83,7 @@ Future<bool?> showTaskDeleteDialog(
actions: [
SecondaryButton(onPressed: () => closeOverlay(dialogContext), child: Text(dialogContext.l10n.cancel)),
DestructiveButton(
onPressed: () => closeOverlay(dialogContext, currentKeepFiles),
onPressed: () => closeOverlay(dialogContext, !deleteFiles),
child: Text(dialogContext.l10n.delete),
),
],
+1 -1
View File
@@ -98,7 +98,7 @@
"startAll": "بدء الكل",
"pauseAll": "إيقاف الكل مؤقتاً",
"deleteTask": "حذف @count مهمة",
"deleteTaskTip": "الاحتفاظ بالملفات التي تم تحميلها",
"deleteTaskTip": "حذف الملفات التي تم تنزيلها",
"delete": "حذف",
"add": "إضافة",
"edit": "تعديل",
+1 -1
View File
@@ -105,7 +105,7 @@
"startAll": "Hamısını Başlat",
"pauseAll": "Hamısına Fasilə Ver",
"deleteTask": "@count tapşırığı sil",
"deleteTaskTip": "Endirilmiş faylları saxla",
"deleteTaskTip": "Endirilmiş faylları sil",
"delete": "Sil",
"add": "Əlavə et",
"edit": "Redaktə et",
+1 -1
View File
@@ -98,7 +98,7 @@
"startAll": "Inicia-ho tot",
"pauseAll": "Pausa-ho tot",
"deleteTask": "Suprimeix @count tasques",
"deleteTaskTip": "Mantén els fitxers baixats",
"deleteTaskTip": "Suprimeix els fitxers baixats",
"delete": "Suprimeix",
"add": "Afegeix",
"edit": "Edita",
+1 -1
View File
@@ -98,7 +98,7 @@
"startAll": "Alles starten",
"pauseAll": "Alle pausieren",
"deleteTask": "@count Aufgaben löschen",
"deleteTaskTip": "Heruntergeladene Dateien behalten",
"deleteTaskTip": "Heruntergeladene Dateien löschen",
"delete": "Löschen",
"add": "Hinzugefügt",
"edit": "Bearbeiten",
+1 -1
View File
@@ -105,7 +105,7 @@
"startAll": "Start All",
"pauseAll": "Pause All",
"deleteTask": "Delete @count tasks",
"deleteTaskTip": "Keep downloaded files",
"deleteTaskTip": "Delete downloaded files",
"delete": "Delete",
"add": "Add",
"edit": "Edit",
+1 -1
View File
@@ -98,7 +98,7 @@
"startAll": "Iniciar Todo",
"pauseAll": "Pausar Todo",
"deleteTask": "Eliminar @count tareas",
"deleteTaskTip": "Mantener archivos descargados",
"deleteTaskTip": "Eliminar archivos descargados",
"delete": "Eliminar",
"add": "Añadir",
"edit": "Editar",
+1 -1
View File
@@ -98,7 +98,7 @@
"startAll": "شروع همه",
"pauseAll": "توقف همه",
"deleteTask": "حذف @count کار",
"deleteTaskTip": "فایل های دانلود شده را نگه دارد",
"deleteTaskTip": "حذف فایل‌های دانلودشده",
"delete": "پاک کردن",
"add": "افزودن",
"edit": "ویرایش",
+1 -1
View File
@@ -98,7 +98,7 @@
"startAll": "Tout démarrer",
"pauseAll": "Tout suspendre",
"deleteTask": "Supprimer @count tâches",
"deleteTaskTip": "Conserver les fichiers téléchargés",
"deleteTaskTip": "Supprimer les fichiers téléchargés",
"delete": "Supprimer",
"add": "Ajouter",
"edit": "Modifier",
+1 -1
View File
@@ -98,7 +98,7 @@
"startAll": "Összes indítása",
"pauseAll": "Összes szüneteltetése",
"deleteTask": "@count feladat törlése",
"deleteTaskTip": "Letöltött fájlok megőrzése",
"deleteTaskTip": "Letöltött fájlok törlése",
"delete": "Törlés",
"add": "Hozzáad",
"edit": "Szerk",
+1 -1
View File
@@ -98,7 +98,7 @@
"startAll": "Mulai Semua",
"pauseAll": "Jeda Semua",
"deleteTask": "Hapus @count Tugas",
"deleteTaskTip": "Simpan file yang terunduh",
"deleteTaskTip": "Hapus berkas yang diunduh",
"delete": "Hapus",
"add": "Tambah",
"edit": "Sunting",
+1 -1
View File
@@ -98,7 +98,7 @@
"startAll": "Avvia tutti",
"pauseAll": "Mtti in pausa tutti",
"deleteTask": "Elimina @count attività",
"deleteTaskTip": "Conserva i file scaricati",
"deleteTaskTip": "Elimina i file scaricati",
"delete": "Elimina",
"add": "Aggiungi",
"edit": "Modifica",
+1 -1
View File
@@ -98,7 +98,7 @@
"startAll": "すべてを開始",
"pauseAll": "すべてを一時停止",
"deleteTask": "@count タスクを削除",
"deleteTaskTip": "ダウンロードしたファイルを保持",
"deleteTaskTip": "ダウンロードしたファイルを削除",
"delete": "削除",
"add": "追加",
"edit": "編集",
+1 -1
View File
@@ -98,7 +98,7 @@
"startAll": "전체 시작",
"pauseAll": "전체 일시정지",
"deleteTask": "작업 @count개 삭제",
"deleteTaskTip": "다운로드된 파일은 유지",
"deleteTaskTip": "다운로드한 파일 삭제",
"delete": "삭제",
"add": "추가",
"edit": "편집",
+1 -1
View File
@@ -98,7 +98,7 @@
"startAll": "Zacznij wszystkie",
"pauseAll": "Zatrzymaj wszystkie",
"deleteTask": "Usuń @count zadania",
"deleteTaskTip": "Zachowaj pobrane pliki",
"deleteTaskTip": "Usuń pobrane pliki",
"delete": "Usuń",
"add": "Dodaj",
"edit": "Edycja",
+1 -1
View File
@@ -98,7 +98,7 @@
"startAll": "Iniciar Tudo",
"pauseAll": "Pausar Tudo",
"deleteTask": "Excluir @count tarefas",
"deleteTaskTip": "Manter arquivos baixados",
"deleteTaskTip": "Excluir arquivos baixados",
"delete": "Excluir",
"add": "Adicionar",
"edit": "Editar",
+1 -1
View File
@@ -98,7 +98,7 @@
"startAll": "Запустить все",
"pauseAll": "Приостановить все",
"deleteTask": "Удалить @count задач",
"deleteTaskTip": "Сохранить загруженные файлы",
"deleteTaskTip": "Удалить загруженные файлы",
"delete": "Удалить",
"add": "Добавить",
"edit": "Редактировать",
+1 -1
View File
@@ -105,7 +105,7 @@
"startAll": "Spustiť všetko",
"pauseAll": "Pozastaviť všetko",
"deleteTask": "Odstrániť @count úloh",
"deleteTaskTip": "Zachovať stiahnuté súbory",
"deleteTaskTip": "Odstrániť stiahnuté súbory",
"delete": "Odstrániť",
"add": "Pridať",
"edit": "Upraviť",
+1 -1
View File
@@ -98,7 +98,7 @@
"startAll": "அனைத்தையும் தொடங்கு",
"pauseAll": "அனைத்தையும் நிறுத்திவை",
"deleteTask": "பணிகளை நீக்கு @count",
"deleteTaskTip": "பதிவிறக்கம் செய்யப்பட்ட கோப்புகளை வைத்திரு",
"deleteTaskTip": "பதிவிறக்கிய கோப்புகளை நீக்கு",
"delete": "நீக்கு",
"add": "சேர்",
"edit": "திருத்துக",
+1 -1
View File
@@ -98,7 +98,7 @@
"startAll": "Tümünü Başlat",
"pauseAll": "Tümünü Duraklat",
"deleteTask": "@count işlemi sil",
"deleteTaskTip": "İndirilen dosyaları sakla",
"deleteTaskTip": "İndirilen dosyaları sil",
"delete": "Sil",
"add": "Ekle",
"edit": "Düzenle",
+1 -1
View File
@@ -98,7 +98,7 @@
"startAll": "Запустити все",
"pauseAll": "Зупинити все",
"deleteTask": "Видалити @count завдань",
"deleteTaskTip": "Зберегти завантажені файли",
"deleteTaskTip": "Видалити завантажені файли",
"delete": "Видалити",
"add": "Додати",
"edit": "Редагування",
+1 -1
View File
@@ -98,7 +98,7 @@
"startAll": "Bắt đầu tất cả",
"pauseAll": "Tạm dừng tất cả",
"deleteTask": "Xóa @count nhiệm vụ",
"deleteTaskTip": "Giữ các tệp đã tải về",
"deleteTaskTip": "Xóa các tệp đã tải xuống",
"delete": "Xóa",
"add": "Thêm",
"edit": "Sửa",
+1 -1
View File
@@ -98,7 +98,7 @@
"startAll": "全部开始",
"pauseAll": "全部暂停",
"deleteTask": "删除 @count 个任务",
"deleteTaskTip": "保留已下载的文件",
"deleteTaskTip": "删除已下载的文件",
"delete": "删除",
"add": "添加",
"edit": "编辑",
+1 -1
View File
@@ -98,7 +98,7 @@
"startAll": "全部開始",
"pauseAll": "全部暫停",
"deleteTask": "刪除 @count 個任務",
"deleteTaskTip": "保留已下載的檔案",
"deleteTaskTip": "刪除已下載的檔案",
"delete": "刪除",
"add": "新增",
"edit": "編輯",
@@ -35,6 +35,8 @@ void main() {
await tester.tap(find.text('Open delete dialog'));
await tester.pumpAndSettle();
expect(find.text('Affects 65 downloads and 65 files.'), findsOneWidget);
final deleteFilesSwitch = find.byKey(const ValueKey('task-delete-files-switch'));
expect(tester.widget<shad.Switch>(deleteFilesSwitch).value, isFalse);
expect(keepFiles, isNull);
await tester.tap(find.text('Delete'));
await tester.pumpAndSettle();
+8 -5
View File
@@ -5361,7 +5361,7 @@ void main() {
expect(tester.takeException(), isNull);
});
testWidgets('delete dialog returns keep-files switch value', (WidgetTester tester) async {
testWidgets('delete dialog only removes downloaded files when requested', (WidgetTester tester) async {
await _setTestSize(tester, const Size(520, 620));
bool? keepFiles;
await tester.pumpWidget(
@@ -5384,11 +5384,14 @@ void main() {
expect(find.text('Delete 2 tasks?'), findsOneWidget);
expect(find.text('Only remove the task record from Gopeed'), findsNothing);
expect(find.byKey(const ValueKey('task-delete-dialog-icon')), findsOneWidget);
expect(find.byKey(const ValueKey('task-delete-keep-files-option')), findsOneWidget);
final keepFilesSwitch = find.byKey(const ValueKey('task-delete-keep-files-switch'));
expect(tester.widget<shad.Switch>(keepFilesSwitch).value, isTrue);
expect(find.byKey(const ValueKey('task-delete-files-option')), findsOneWidget);
final deleteFilesSwitch = find.byKey(const ValueKey('task-delete-files-switch'));
expect(find.text('Delete downloaded files'), findsOneWidget);
expect(tester.widget<shad.Switch>(deleteFilesSwitch).value, isFalse);
await tester.tap(keepFilesSwitch);
await tester.tap(deleteFilesSwitch);
await tester.pumpAndSettle();
expect(tester.widget<shad.Switch>(deleteFilesSwitch).value, isTrue);
await tester.pumpAndSettle();
await tester.tap(find.text('Delete'));
await tester.pumpAndSettle();