带有流侦听的种族条件

问题描述 投票:0回答:1

我有一个如下所示的异步函数。但是,在完成流侦听之前,内容将返回null。

我开始玩Future.delayed,但想得更好,想问一下是否有更好的方法来确保它异步?

import 'package:googleapis/drive/v3.dart' as ga;

static Future<String> getContentsFromFile() async {
String content;

ga.Media mediaResponse = await drive.files.get(fileId);

mediaResponse.stream.listen((data) {
    print("DataReceived: "+data);
    content = data
  }, onDone: () async {
    print("Task Done");
  }, onError: (error) {
    print("Some Error");
  });
return content;
}

我这样调用该函数。

String content = await getContentsFromFile();
flutter dart stream
1个回答
0
投票

您可以将Completer用于这种控制流程:

import 'dart:async';
import 'package:googleapis/drive/v3.dart' as ga;

static Future<String> getContentsFromFile() async {
  Completer<String> completer = Completer();

  ga.Media mediaResponse = await drive.files.get(fileId);

  mediaResponse.stream.listen((data) {
    print("DataReceived: "+data);
    completer.complete(data);
  }, onDone: () async {
    print("Task Done");
  }, onError: (error) {
    print("Some Error");
  });

  return completer.future;
}
© www.soinside.com 2019 - 2024. All rights reserved.