Как восстановить базу данных приложения. (Flutter с SQLite)
Мне нужно разработать функциональность по восстановлению базы данных с помощью файла резервной копии, чтобы пользователь мог восстановить данные после переустановки приложения.
Я разрабатываю приложение для Android с использованием Flutter и собственной базы данных устройства SQLite с lib moor_flutter. Я разработал функцию, позволяющую пользователю создавать резервную копию базы данных, а другую - восстанавливать базу данных из этого файла резервной копии.
Проблема в том, что на некоторых устройствах не работает функция восстановления.
не работало: Motorola one zoom / с android 9, redminote 7 / с android 9, redminote 8 / с android 9.
он работал на: Samsung Galaxy S9 / с Android 9, Moto G4, Redmi 4x / с Android 7.1.
После использования обеих функций для создания или резервного копирования и восстановления.
Future<void> backup() async {
final dbFolder = await getDatabasesPath();
final dbLocation = p.join(dbFolder, 'dbnew.sqlite');
final File file = File(dbLocation);
await ShareExtend.share(file.path, "file");
}
Future<void> restore() async {
final dbFolder = await getDatabasesPath();
final dbLocation = p.join(dbFolder, 'dbnew.sqlite');
AppDatabase.instance.close();
//acess file backup
File file = await FilePicker.getFile(type: FileType.ANY);
Uint8List updatedContent = await File(file.path).readAsBytes();
File(dbLocation).writeAsBytes(updatedContent);
}
Разрешения в AndroidManifest.xml
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-permission android:name="android.permission.USE_FINGERPRINT"/>