Внутри флаттера скопируйте большой файл из папки активов в папку документов приложения - PullRequest
0 голосов
/ 12 января 2019

Я стараюсь использовать большой db-файл. И, следовательно, мой код копирует этот файл из папки Assets в папку Application-Documents-Folder, как видно из примера кода ниже.

Для небольших файлов мой код работает отлично, и я могу отлично работать с моей БД.

Однако, если я попробую сделать это с большим db-файлом (> 665 МБ), все пойдет не так, как в моей Android-части приложения Flutter. (На самом деле, iOS работает отлично, независимо от того, насколько велик размер DB-файла ....). Только для Android большой db-файл ломает вещи.

Следующий код Dart не работает для большого файла (> 665 МБ) внутри Android - (однако он работает для небольших файлов):

  Future<Database> initializeDatabase() async {

    Directory directory = await getApplicationDocumentsDirectory();
    var dbPath = join(directory.path, "ch_departures.db");

    // copy db file from Assets folder to Documents folder (only if not already there...)    
    if (FileSystemEntity.typeSync(dbPath) == FileSystemEntityType.notFound) {
     ByteData data = await rootBundle.load("assets/ch_departures.db");
     writeToFile(data, dbPath);
    }

    // Open/create the database at a given path
    var departuresDatabase = await openDatabase(dbPath);
    return departuresDatabase;
  }

  // HERE IS WHERE THE CODE CRASHES (WHEN TRYING TO WRITE THE LOADED BYTES)
  void writeToFile(ByteData data, String path) {
    final buffer = data.buffer;
    return new File(path).writeAsBytesSync(
      buffer.asUint8List(data.offsetInBytes, data.lengthInBytes));
  }

Я пытался поиграться с gradle.properties файлом Android-части моего приложения Flutter.

Внутри gradle.properties, я попробовал:

org.gradle.jvmargs=-Xmx3g -XX:MaxPermSize=2048m

Но, к сожалению, безуспешно.

Есть ли у вас какие-либо идеи о том, как заставить все это работать с большим (> 665 МБ) файлом ????

1 Ответ

0 голосов
/ 15 января 2019

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

Плагин Flutter называется large_file_copy и находится здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...