diff --git a/flutter_cache_manager/lib/src/storage/cache_info_repositories/cache_object_provider.dart b/flutter_cache_manager/lib/src/storage/cache_info_repositories/cache_object_provider.dart index 16bf5656..0bad679f 100644 --- a/flutter_cache_manager/lib/src/storage/cache_info_repositories/cache_object_provider.dart +++ b/flutter_cache_manager/lib/src/storage/cache_info_repositories/cache_object_provider.dart @@ -27,6 +27,8 @@ class CacheObjectProvider extends CacheInfoRepository } final path = await _getPath(); await File(path).parent.create(recursive: true); + await _dropCorruptedDb(path); + db = await openDatabase(path, version: 3, onCreate: (Database db, int version) async { await db.execute(''' @@ -214,4 +216,28 @@ class CacheObjectProvider extends CacheInfoRepository } } } + + static Future _dropCorruptedDb(String path) async { + final exists = await File(path).exists(); + if (!exists) { + return; + } + + Database? pragmaDb; + bool isIntegral = true; + + try { + pragmaDb = await openDatabase(path); + final check = await pragmaDb.rawQuery("pragma integrity_check"); + isIntegral = check.length == 1 && check[0].values.first == "ok"; + } on DatabaseException catch (e) { + isIntegral = false; + } finally { + await pragmaDb?.close(); + } + + if (!isIntegral) { + await deleteDatabase(path); + } + } }