Flutter中如何在Stream.periodic事件中使用动态间隔时间

纽布

我正在努力寻找一种在 Flutter 中以动态间隔时间定期发出流的方法。我不确定,这真的可能还是不可能。一种解决方法可能是取消旧的定期流并使用新的时间间隔重新初始化它,但我的带有 asyncMap 的定期流没有取消选项。我可以使用具有取消方法的 stream.listen 但我特意需要 asyncMap 将 Future 事件转换为流。在这种情况下,我可以做什么,请给我建议。

我的代码片段 -

int i = 0;

int getTimeDiffForPeriodicEvent() {
  i++;
  return (_timeDiffBetweenSensorCommands * commandList.length + 1) * i;
}

StreamBuilder(
      stream: Stream.periodic(
              Duration(seconds: maskBloc.getTimeDiffForPeriodicEvent()))
          .asyncMap((_) async => maskBloc.getDataFromMask()),
      builder: (context, snapshot) {
        return Container();
      },
    );
丹尼·图彭尼

这是不可能的Stream.periodic,但您也许可以创建一个类,该类可以通过使用async*创建一个可以基于某些可变变量启动流和睡眠的类yield

class AdjustablePeriodStream {
  Duration period;
  AdjustablePeriodStream(this.period);

  Stream<void> start() async* {
    while (true) {
      yield null;
      print('Waiting for $period');
      await Future.delayed(period);
    }
  }
}

这将允许相当容易地改变时期:

Future<void> main() async {
  final ten = Duration(milliseconds: 10);
  final twenty = Duration(milliseconds: 20);
  final x = AdjustablePeriodStream(ten);

  x.start().take(5).listen((_) {
    print('event!');
    x.period = (x.period == ten ? twenty : ten);
  });
}

您可以在此处查看示例输出:

https://dartpad.dev/6a9cb253fbf29d8adcf087c30347835c

event!
Waiting for 0:00:00.020000
event!
Waiting for 0:00:00.010000
event!
Waiting for 0:00:00.020000
event!
Waiting for 0:00:00.010000
event!
Waiting for 0:00:00.020000

它只是在等待 10 到 20 毫秒之间切换(大概您还有其他一些想要用于此的机制)。您可能还需要某种方式来取消流(这将退出while (true)循环),但我在这里省略了它以保持代码简短和具体。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何更改自举轮播的间隔时间?

Javascript如何设置间隔时间以停止滚动

事件间隔时间(熊猫)

使用BigQuery中的事件时间戳记检测事件之间的30天(或更长时间)间隔

如何在Flutter中建立动态清单?

如何在Flutter中设置间隔?

如何修改Oracle数据库功能使用情况统计信息采样间隔时间?

WinForms:如何使用计时器在间隔时间结束时运行代码,但通过倒计时重置间隔

根据codeigniter中的间隔时间逐个显示div

Excel:如何计算平均间隔时间

如何创建单击事件以显示设置的间隔时间

如何在Flutter中在TextField中使用onKeyUp事件

如何在Flutter Stream中使用Firebase RTDB

如何在Flutter中开始间隔动画

XSSFCell->如何从长整数获取间隔时间值

根据日期时间列中的间隔时间阈值修改行的id值

如何在AWS Lambda python中捕获Stream事件

如何在AFNetworking中使用AFHTTPClient设置超时间隔?

如何创建间隔时间算法?

如何在vb.net中使用MySQL中的DATE_SUB和小时间隔

如何在Java脚本或jquery中单击同一按钮两次时计算间隔时间

如何在1个间隔时间内选择数据作为动态查询

如何设置间隔时间?

如何计算平均间隔时间

如何在 JavaScript 中的条件下更改间隔时间?

如何在Apache Camel中以间隔时间开始一条到另一条路线

如何在 Flutter 中显示日期或时间?

如何在 Flutter 中动态创建多个 Stream?

如何在 BigQuery 中使用 SQL 查询来计算特定时间间隔内的最大事件?