将资产从捆绑包复制到文件系统

xen*_*xen 4 dart flutter

我试图将一个 sqlite 数据库从根包复制到文件系统上以便使用它。

我尝试了许多不同的方法,但最终总是将不正确的数据量写入磁盘。我正在使用的代码如下所示:

Directory appDocDir = await getExternalStorageDirectory();
String path = join(appDocDir.path, "data.db");
bool exists = await new File(path).exists();
if (!exists) {
  var out = new File(path).openWrite();

  var data = await rootBundle.load("assets/data.sqlite");
  var list = data.buffer.asUint8List();
  out.write(list);
  out.close();
}
Run Code Online (Sandbox Code Playgroud)

ame*_*nbo 5

我能够通过以下方式做到这一点。

ByteData data = await rootBundle.load("data.sqlite");
List<int> bytes = data.buffer.asUint8List(data.offsetInBytes, data.lengthInBytes);

Directory appDocDir = await getApplicationDocumentsDirectory()
String path = join(appDocDir.path, "data.db");
await File(path).writeAsBytes(bytes);
Run Code Online (Sandbox Code Playgroud)


Col*_*son 4

您不能将 a 的内容写入Uint8Listusing (旨在对参数进行操作File)。您最终将编写通过调用 获得的UTF -8 编码表示形式,该表示形式可能比列表的实际内容大得多。IOSink.writeStringStringtoString()Uint8List

相反,您可以Uint8List使用 向文件写入 a IOSink.add

在您提供的示例中,您还可以使用 一次写入整个文件new File(path).writeAsBytes(list)