【问题标题】:Not able to stop listening to stream in flutter无法停止在颤动中收听流
【发布时间】: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


【解决方案1】:

即使其中一个选项卡不可见,dispose 也永远不会被调用,因为选项卡的父级仍然存在于路由堆栈中。

你有两个选择

  1. 将流设为广播流
  2. 下面

而不是将流设为BroadCast 在需要时更改侦听器函数


  //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) { });

【讨论】:

    猜你喜欢
    • 2019-01-25
    • 2020-06-18
    • 1970-01-01
    • 1970-01-01
    • 2020-10-07
    • 1970-01-01
    • 1970-01-01
    • 2019-05-19
    • 2020-09-04
    相关资源
    最近更新 更多