【发布时间】:2020-07-29 03:54:30
【问题描述】:
我在flutter中使用了一个用于活动识别的库,它为来自手机传感器的活动识别数据创建了一个流,我可以启动流,但在底部导航栏的选项卡中无法停止它变化。
我正在关注这个例子,所以现在我想要一个开始和停止按钮,可以开始和停止流监听。
我是这样创建的:
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 & deactivate 方法中,我编写了如下代码:
@override
void dispose() {
streamController.close();
print("STREAM_CLOSED");
super.dispose();
}
@override
void deactivate() {
streamController.close();
print("STREAM_CLOSED");
super.deactivate();
}
但是当标签从底部导航栏更改时,它不会停止流式传输, 所以当我再次打开该选项卡时,它会显示“Bad State : Stream has been listened”,所以请帮助我解决这个问题。
提前致谢。
【问题讨论】:
-
选项卡不是页面,因此当您更改它们时,您没有运行 dispose 或 deactivate(我认为您的打印语句没有运行?),我看不到您是否在外部设置流initState 但假设你是因为它会解释错误。更改选项卡时也不应重新运行 InitState。
标签: android flutter stream activity-recognition