Флаттер: Как сделать печать каждые 5 секунд / когда пользователь нажимает кнопку, чтобы покинуть страницу?

#flutter #printing #timer

Вопрос:

В настоящее время значение затраченного времени печатается миллион раз в секунду, хорошо, может быть, больше 10 раз. В этом нет необходимости. Я просто хочу, чтобы он печатался каждые 5 секунд или, если пользователь уходит со страницы, печатайте. Чтобы я мог записать количество времени, проведенного здесь.

Как мне этого добиться?

Ниже прилагается мой код:

 void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: TimerTest(),
    );
  }
}

class TimerTest extends StatefulWidget {
  @override
  _TimerTestState createState() => _TimerTestState();
}

class _TimerTestState extends State<TimerTest> with TickerProviderStateMixin {
  AnimationController _controller;
  int levelClock = 5400;

  @override
  void dispose() {
    _controller.dispose();
    super.dispose();
  }

  @override
  void initState() {
    super.initState();

    _controller = AnimationController(
        vsync: this,
        duration: Duration(
            seconds:
                levelClock) 
        );

    _controller.forward();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      backgroundColor: Color(0xff04072E),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            Countup(
              animation: StepTween(
                begin: 0, // THIS IS A USER ENTERED NUMBER
                end: levelClock,
              ).animate(_controller),
            ),
          ],
        ),
      ),
    );
  }
}

class Countup extends AnimatedWidget {
  Countup({Key key, this.animation}) : super(key: key, listenable: animation);
  Animation<int> animation;

  @override
  build(BuildContext context) {
    Duration clockTimer = Duration(seconds: animation.value);

    String timerText =
        '${clockTimer.inMinutes.remainder(60).toString()}:${clockTimer.inSeconds.remainder(60).toString().padLeft(2, '0')}';

    print('animation.value  ${animation.value} ');

    return Text(
      "$timerText",
      style: TextStyle(
        fontSize: 45,
        color: Theme.of(context).primaryColor,
      ),
    );
  }
}
 

Комментарии:

1. для записи времени каждые 5 секунд вы можете использовать Future. задержка(Продолжительность(секунд:5), () => печать(время));

2. это задерживает начало печати значения , но после первых 5 секунд значение снова печатается непрерывно.

Ответ №1:

Для этого вы можете использовать периодическую функцию таймера. Для получения более подробной информации : https://api.flutter.dev/flutter/dart-async/Timer/Timer.periodic.html

Комментарии:

1. это задерживает начало печати значения , но после первых 5 секунд значение снова печатается непрерывно.

2. Вызываете ли вы таймер в методе сборки?