Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Flutter 如何转换未来<;布尔>;流入溪流<;布尔>;_Flutter_Dart - Fatal编程技术网

Flutter 如何转换未来<;布尔>;流入溪流<;布尔>;

Flutter 如何转换未来<;布尔>;流入溪流<;布尔>;,flutter,dart,Flutter,Dart,在我的flatter应用程序中,我有一个函数返回Future,但我希望得到的结果是Stream。以下是函数: Future<bool> isGpsOn() async { if (await Geolocator().isLocationServiceEnabled()) { return true; } else { return false; } } Future isGpsOn()异步{ 如果(等待Geolocator(

在我的flatter应用程序中,我有一个函数返回
Future
,但我希望得到的结果是
Stream
。以下是函数:

  Future<bool> isGpsOn() async {
    if (await Geolocator().isLocationServiceEnabled()) {
      return true;
    } else {
      return false;
    }
  }
Future isGpsOn()异步{
如果(等待Geolocator().isLocationServiceEnabled()){
返回true;
}否则{
返回false;
}
}
如何做到这一点?

阅读并检查我的答案:

Stream gpsStatusStream()异步*{
bool启用;
while(true){
试一试{
bool isEnabled=等待地理定位器()。isLocationServiceEnabled();
如果(已启用!=已启用){
已启用=已启用;
产量使能;
}
}
捕获(错误){}
等待未来。延迟(持续时间(秒:5));
}
}
gpsStatusStream()。侦听((已启用){
打印(已启用?“已启用”:“已禁用”);
});
或创建转换器:

Stream futureToStream(fn,defaultValue,Duration)异步*{
var结果;
while(true){
试一试{
结果=等待fn();
}
捕获(错误){
结果=默认值;
}
最后{
产量结果;
}
等待未来。延迟(持续时间);
}
}
Future isGpsOn()异步{
返回等待地理定位器().isLocationServiceEnabled();
}
final gpsStatusStream=futureToStream(isGpsOn,false,持续时间(秒:5));
gpsStatusStream.listen((已启用){
打印(已启用?“已启用”:“已禁用”);
});

如果您不想更改函数的返回类型,您可以通过简单地调用返回的
Future
在哪里调用
isGpsOn()
,使调用方将
未来的
流转换为
流。我想把它用在群体模式中,“等待未来。延迟(持续时间(秒:5));”为什么会延迟?请解释。@Newaj您可以删除它,这只是为了表明它是连续的事件流。因为您试图获取数据流,这不是一次性的。@Newaj我还添加了此延迟,以避免过于频繁地检查gps的状态,它会一直调用该函数。但我希望它在GPS状态改变时立即呼叫。类似StreamBuilder的东西。@Newaj它是基于手动调用地理定位器服务。好的,当答案改变时,我会把它改成状态。