从内部流监听DART返回结果

时间:2019-06-10 20:15:53

标签: flutter dart

如果流没有返回连接值,我需要从函数返回结果。

所以我有外部功能和内部功能。我如何从外部内部返回结果?

Future<bool> send() async {

        var subscription = Connectivity().onConnectivityChanged.listen((ConnectivityResult result) {

            if(result == ConnectivityResult.none)
                throw("No connectivity");
// Need to stop `send` function here and return some result
        });

        await doSomeWork();

        return true;
}

1 个答案:

答案 0 :(得分:1)

Future返回的send只能完成一次,而Stream可能会发出多个事件-您无法使用true完成此操作,然后再执行用false重新完成,因为流中出现了一些新事件。

您可以确定send的返回值取决于流中的 first 事件:

Future<bool> send() async {
  var result = await Connectivity().onConnectivityChange.first;
  if (result == ConnectivityResult.none) {
    // handle no connection
    return false;
  }
  await doSomeWork(); // only happens if the first result was not `none`
  return true;
}

否则,您需要确定在调用none并且{{1}之后,通过 获得doSomeWork()连接结果的含义。 }从Future返回的结果。