Future<List<Media>> getVideo(var _client, var _videofolder) async {
final pathContext = path.Context(style: path.Style.windows);
var tempDir = await getTemporaryDirectory();
String tempPath = tempDir.path;
print(tempPath);
final filePath = pathContext.join(tempPath, _videofolder[videoNumber]["name"]);
if (await io.File(filePath).exists() == false) {
print("file does not exist yet");
drive
.fileDownloadFuntion(_videofolder[videoNumber]["id"], _client).then((response) {
print("file downloaded");
Uint8List byteList;
final bytesBuilder = BytesBuilder();
(response).stream.listen((data) {
bytesBuilder.add(data);
}).onDone(() {
byteList = bytesBuilder.toBytes();
final saveFile = io.File(filePath);
saveFile.writeAsBytes(byteList.toList());
print("File saved at ${saveFile.path}");
if (io.File(filePath).exists() == true)
medias.add(
Media.file(io.File(filePath.replaceAll('"', ''))),
);
});
});
}
else{
print("file exists");
if (await io.File(filePath).exists() == true)
medias.add(
Media.file(io.File(filePath.replaceAll('"', ''))),
);
}
videoNumber++;
return medias;
}
上面的代码在本地存储中查找视频文件。如果文件不存在,它会继续从谷歌驱动器下载它。然后在将文件转换为 8 位无符号整数列表后保存下载的文件。
上面代码的问题在于它在流完成之前返回了未更改的变量 medias(Media 列表)。我希望在将新下载的文件添加到列表(媒体)之前,该函数不应返回值。这有可能吗?