diff --git a/lib/logic/auth_provider.dart b/lib/logic/auth_provider.dart index a8073e5..400a811 100644 --- a/lib/logic/auth_provider.dart +++ b/lib/logic/auth_provider.dart @@ -210,22 +210,44 @@ class AuthProvider extends ChangeNotifier { try { final dbFolder = await databaseFactory.getDatabasesPath(); final dbFile = File(p.join(dbFolder, 'chat_app.db')); - if (await dbFile.exists()) { - await dbFile.delete(); - print("БАЗА ДАННЫХ УСПЕШНО УНИЧТОЖЕНА В ЦЕЛЯХ БЕЗОПАСНОСТИ"); - } final journalFile = File(p.join(dbFolder, 'chat_app.db-journal')); - if (await journalFile.exists()) { - await journalFile.delete(); - } final walFile = File(p.join(dbFolder, 'chat_app.db-wal')); - if (await walFile.exists()) { - await walFile.delete(); - } final shmFile = File(p.join(dbFolder, 'chat_app.db-shm')); - if (await shmFile.exists()) { - await shmFile.delete(); + + // Даем операционной системе немного времени на освобождение дескрипторов после закрытия Drift + await Future.delayed(const Duration(milliseconds: 300)); + + Future safeDelete(File file) async { + if (await file.exists()) { + for (int i = 0; i < 5; i++) { + try { + await file.delete(); + print("Файл ${file.path} успешно удален"); + return; + } catch (e) { + if (i == 4) { + // Если не удалось за 5 попыток, пробуем через native deleteDatabase + try { + await databaseFactory.deleteDatabase(file.path); + print("Файл ${file.path} удален через databaseFactory"); + return; + } catch (ex) { + print("Не удалось удалить файл после 5 попыток: $ex"); + rethrow; + } + } + await Future.delayed(const Duration(milliseconds: 200)); + } + } + } } + + await safeDelete(dbFile); + await safeDelete(journalFile); + await safeDelete(walFile); + await safeDelete(shmFile); + + print("БАЗА ДАННЫХ УСПЕШНО УНИЧТОЖЕНА В ЦЕЛЯХ БЕЗОПАСНОСТИ"); } catch (e) { print("Ошибка удаления файлов БД: $e"); }