0
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 のリスト) を返すことです。新しくダウンロードしたファイルがリスト (メディア) に追加されるまで、関数が値を返さないようにしたいと考えています。これは何らかの方法で可能ですか?

4

1 に答える 1