From 781cabd7c8e3167bd6790cb36044d56d7c1a491a Mon Sep 17 00:00:00 2001 From: nahnah Date: Tue, 3 Feb 2026 21:47:15 +0000 Subject: [PATCH] [fix]: Avoid duplicate repo entries --- lib/screens/repositories_screen.dart | 119 +++++++++++++++------------ 1 file changed, 66 insertions(+), 53 deletions(-) diff --git a/lib/screens/repositories_screen.dart b/lib/screens/repositories_screen.dart index d1c5669..f73d10c 100644 --- a/lib/screens/repositories_screen.dart +++ b/lib/screens/repositories_screen.dart @@ -121,26 +121,30 @@ class _RepositoriesScreenState extends State { onChanged: (newValue) async { if (newValue) { // Add the preset - await _runRepositoryActionWithDialog( - context, - () async { - final repoProvider = context - .read(); - final apiService = context - .read(); - final appProvider = context - .read(); - - await repoProvider.addRepository( - preset['name']!, - preset['url']!, - ); - await apiService.clearRepositoryCache(); - await appProvider.refreshAll( - repositoriesProvider: repoProvider, - ); - }, + final repoProvider = context + .read(); + await repoProvider.addRepository( + preset['name']!, + preset['url']!, ); + // Only proceed with modal and refresh if addition succeeded (no error) + if (repoProvider.error == null && + context.mounted) { + await _runRepositoryActionWithDialog( + context, + () async { + final apiService = context + .read(); + final appProvider = context + .read(); + + await apiService.clearRepositoryCache(); + await appProvider.refreshAll( + repositoriesProvider: repoProvider, + ); + }, + ); + } } else { // Remove the preset Repository? addedRepo; @@ -153,25 +157,28 @@ class _RepositoriesScreenState extends State { addedRepo = null; } if (addedRepo != null) { - await _runRepositoryActionWithDialog( - context, - () async { - final repoProvider = context - .read(); - final apiService = context - .read(); - final appProvider = context - .read(); + final repoProvider = context + .read(); + repoProvider.deleteRepository(addedRepo.id); + // Only proceed with modal and refresh if deletion succeeded (no error) + if (repoProvider.error == null && + context.mounted) { + await _runRepositoryActionWithDialog( + context, + () async { + final apiService = context + .read(); + final appProvider = context + .read(); - repoProvider.deleteRepository( - addedRepo!.id, - ); - await apiService.clearRepositoryCache(); - await appProvider.refreshAll( - repositoriesProvider: repoProvider, - ); - }, - ); + await apiService + .clearRepositoryCache(); + await appProvider.refreshAll( + repositoriesProvider: repoProvider, + ); + }, + ); + } } } }, @@ -338,26 +345,32 @@ class _RepositoriesScreenState extends State { onAdd: (name, url) async { // Close the add dialog, then run the add flow with a blocking progress dialog. Navigator.pop(context); - await _runRepositoryActionWithDialog(context, () async { - final repoProvider = context.read(); - final apiService = context.read(); - final appProvider = context.read(); + final repoProvider = context.read(); + await repoProvider.addRepository(name, url); + // Only proceed with modal and refresh if addition succeeded (no error) + if (repoProvider.error == null && context.mounted) { + await _runRepositoryActionWithDialog(context, () async { + final apiService = context.read(); + final appProvider = context.read(); - await repoProvider.addRepository(name, url); - await apiService.clearRepositoryCache(); - await appProvider.refreshAll(repositoriesProvider: repoProvider); - }); + await apiService.clearRepositoryCache(); + await appProvider.refreshAll(repositoriesProvider: repoProvider); + }); + } }, onAddPreset: (name, url) async { - await _runRepositoryActionWithDialog(context, () async { - final repoProvider = context.read(); - final apiService = context.read(); - final appProvider = context.read(); + final repoProvider = context.read(); + await repoProvider.addRepository(name, url); + // Only proceed with modal and refresh if addition succeeded (no error) + if (repoProvider.error == null && context.mounted) { + await _runRepositoryActionWithDialog(context, () async { + final apiService = context.read(); + final appProvider = context.read(); - await repoProvider.addRepository(name, url); - await apiService.clearRepositoryCache(); - await appProvider.refreshAll(repositoriesProvider: repoProvider); - }); + await apiService.clearRepositoryCache(); + await appProvider.refreshAll(repositoriesProvider: repoProvider); + }); + } }, ), );