在Flutter内部,将大文件从Assets文件夹复制到Application Documents文件夹

时间:2019-01-12 14:59:08

标签: android ios file dart flutter

我尝试使用大的db文件。因此,我的代码将此文件从Assets文件夹复制到Application-Documents-Folder,如下面的代码示例所示。

对于小文件,我的代码工作得很好,并且我可以在数据库上工作得很好。

但是,如果我尝试使用较大的db文件(> 665MB),那么就好像我的Flutter应用中的Android部分一样开始崩溃。 (实际上,无论db-File到底有多大,iOS都可以正常工作。)。仅适用于Android,大的db-File会破坏事情。

以下Dart代码不适用于Android内部的大文件(> 665MB)-(但适用于小文件):

  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));
  }

我尝试使用Flutter App的Android部分的gradle.properties文件。

在gradle.properties中,我尝试过:

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

但不幸的是,没有成功。

您对如何使用较大的文件(> 665MB)进行所有工作有任何想法吗????

1 个答案:

答案 0 :(得分:0)

对于我遇到的Flutter的大文件复制问题,终于有了解决方案。我创建了一个Flutter插件,该插件分别在iOS和Android本地进行文件复制。

The Flutter plugin is called large_file_copy and can be found here