Я изо всех сил пытаюсь найти способ периодически испускать поток с динамическим интервалом времени во 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();
},
);
async*
типа:Stream<int> randomPeriodicStream() async* { int i = 0; while (true) { await Future.delayed(Duration(milliseconds: 1000 + Random().nextInt(3000))); print('yielding $i'); yield i++; } }
- person pskink   schedule 17.07.2021randomPeriodicStream() async* { while (true) { await Future.delayed(getTimeDiffForPeriodicEvent()); yield await getDataFromMask(); } }
- это все, не нужноStream.periodic
,asyncMap
и т. д. - person pskink   schedule 18.07.2021randomPeriodicStream
– это асинхронный* генератор. создаетStream
, который вы можете использовать непосредственно вStreamBuilder
- просто используйтеfinal randomStream = randomPeriodicStream();
и внутриStreamBuilder
добавьтеstream: randomStream,
- person pskink   schedule 18.07.2021