Как восстановить базу данных приложения. (Флаттер с SQLite) - PullRequest
0 голосов
/ 23 февраля 2020

Мне нужно разработать функциональность для восстановления базы данных с помощью файла резервной копии, чтобы пользователь мог восстановить данные после переустановки приложения.

Я занимаюсь разработкой приложения Android с использованием Flutter и устройства SQLite. собственная база данных с lib moor_flutter. Я разработал для пользователя функцию резервного копирования базы данных, а другую - для восстановления базы данных из этого файла резервной копии.

Проблема заключается в том, что функция восстановления не работает на некоторых устройствах.

it не работал: 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"/>
...