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;
}
上記のコードは、ローカル ストレージでビデオ ファイルを検索します。ファイルが存在しない場合は、Google ドライブからのダウンロードに進みます。次に、ファイルを 8 ビットの符号なし整数リストに変換した後、ダウンロードしたファイルを保存します。
上記のコードの問題は、ストリームが完了する前に変更されていない変数 medias (Media のリスト) を返すことです。新しくダウンロードしたファイルがリスト (メディア) に追加されるまで、関数が値を返さないようにしたいと考えています。これは何らかの方法で可能ですか?