Android 无法停止聆听飘荡的溪流
我在Flitter中使用了一个用于活动识别的库,它为来自手机传感器的活动识别数据创建了一个流,我可以启动该流,但当底部导航栏的选项卡更改时,无法停止该流 我遵循这个例子,所以现在我想有一个启动和停止按钮,可以启动和停止流监听 我是这样创造的:Android 无法停止聆听飘荡的溪流,android,flutter,stream,activity-recognition,Android,Flutter,Stream,Activity Recognition,我在Flitter中使用了一个用于活动识别的库,它为来自手机传感器的活动识别数据创建了一个流,我可以启动该流,但当底部导航栏的选项卡更改时,无法停止该流 我遵循这个例子,所以现在我想有一个启动和停止按钮,可以启动和停止流监听 我是这样创造的: Stream<Activity> stream; StreamController<Activity> streamController = new StreamController(); stream = ActivityRec
Stream<Activity> stream;
StreamController<Activity> streamController = new StreamController();
stream = ActivityRecognition.activityUpdates();
if(!streamController.hasListener){
streamController.addStream(stream);
streamController.stream.listen(onData);
}
Future<void> onData(Activity activity) async {
String formattedDate() {
var date = DateTime.now();
return date.day.toString() +
"/" +
date.month.toString() +
"/" +
date.year.toString() +
" " +
date.hour.toString() +
":" +
date.minute.toString() +
":" +
date.second.toString();
}
insertActivity(RecognizedData(
activity: activity.type.toString(),
confidence: activity.confidence,
dateTime: formattedDate()));
}
但当标签从底部导航栏更改时,它不会停止流媒体,
所以,当我再次打开该选项卡时,它会显示“坏状态:流已被侦听”,请帮助我解决此问题
提前感谢。即使其中一个选项卡不可见,也不会调用
dispose
,因为该选项卡的父级仍然存在于路由堆栈上
你有两个选择
广播
在需要时像这样更改侦听器功能
//obtain the subscription only once, with a dummy listener if you prefer
//stream.listen just sets the onData function
var sub = stream.listen((event){});
//just change the listener like this in the required tabs
//tab A
sub.onData((event) { });
//tab B
sub.onData((event) { });
选项卡不是页面,因此当您更改它们时,您没有运行dispose或deactivate(我假设您的打印语句没有运行?),我看不出您是否在initState之外设置流,但假设您是,因为这可以解释错误。更改选项卡时,InitState也不应重新运行。
//obtain the subscription only once, with a dummy listener if you prefer
//stream.listen just sets the onData function
var sub = stream.listen((event){});
//just change the listener like this in the required tabs
//tab A
sub.onData((event) { });
//tab B
sub.onData((event) { });