2
respostas

[Dúvida] Adicionar timer para inatividade

Não vi nenhuma implementação. Também não consegui resolver. Aí vou postar o que tentei fazer e para caso alguém saiba, me dar alguma dica depois de como finalizar.

A minha intenção foi criar uma nova Stream lá na classe BotClock

Stream inputStream() async* {
    int i = 0;

    while (i != 5) {
      await Future.delayed(Duration(seconds: i));
      yield i++;
      print('time: $i');
    }
  }

E após a linha que lê o input do usuário eu adicionei o seguinte trecho para ver se eu não digitasse nada, se o tempo iria acrescentar ou não:

 var secondStream = BotClock().inputStream();
    var timeoutStream = secondStream.listen(
        (event) => print('Tempo ocioso $event'),
        onDone: () => print('Função deu timeout'));

Mas não consegui fazer o contador incrementar enquanto a máquina espera o usuário digitar alguma pergunta. Alguém pode me ajudar?

2 respostas

Print com o que eu adicionei para melhor visualização print para melhor visualização do que eu fiz

Olá, Guilherme!

Desculpa a demora, estou respondendo esse tópico para tentar ajudar você e outros alunos que estiverem com essa mesma dúvida. Valeu :)

Pelo que entendi, você está tentando adicionar um timer para inatividade no seu código Dart. No entanto, parece que o contador não está incrementando enquanto a máquina espera o usuário digitar alguma pergunta.

Uma possível solução para esse problema é utilizar a classe Timer do pacote dart:async. Com essa classe, você pode criar um timer que irá incrementar o contador a cada segundo. Veja um exemplo de como você pode implementar isso:

import 'dart:async';

class BotClock {
  Stream<int> inputStream() {
    int i = 0;

    return Stream.periodic(Duration(seconds: 1), (int _) => i++);
  }
}

void main() {
  var botClock = BotClock();
  var timeoutStream = botClock.inputStream().listen(
    (event) => print('Tempo ocioso: $event'),
    onDone: () => print('Função deu timeout'),
  );

  // Aqui você pode adicionar a lógica para interromper o timer quando o usuário digitar algo

  // Exemplo de como interromper o timer após 5 segundos
  Timer(Duration(seconds: 5), () {
    timeoutStream.cancel();
  });
}

Nesse exemplo, a classe BotClock possui um método inputStream que retorna uma Stream que emite um valor a cada segundo. No main, criamos uma instância de BotClock e chamamos o método inputStream para obter a Stream. Em seguida, utilizamos o método listen para escutar os eventos da Stream e imprimir o tempo ocioso. Por fim, utilizamos um Timer para interromper o timer após 5 segundos.

Espero que essa solução possa te ajudar a resolver o problema! Se tiver mais alguma dúvida, é só perguntar. Bons estudos!