Как использовать таймер в виджете Flutter: объяснение нескольких методов

Чтобы использовать таймер в виджете Flutter, вы можете использовать несколько методов. Вот несколько примеров:

Метод 1: использование конструктора Timer. periodic()

import 'package:flutter/material.dart';
import 'dart:async';
class MyWidget extends StatefulWidget {
  @override
  _MyWidgetState createState() => _MyWidgetState();
}
class _MyWidgetState extends State<MyWidget> {
  Timer _timer;
  int _seconds = 0;
  @override
  void initState() {
    super.initState();
    _timer = Timer.periodic(Duration(seconds: 1), (timer) {
      setState(() {
        _seconds++;
      });
    });
  }
  @override
  void dispose() {
    _timer.cancel();
    super.dispose();
  }
  @override
  Widget build(BuildContext context) {
    return Text('Seconds: $_seconds');
  }
}

Метод 2: использование пакета CountdownTimer

import 'package:flutter/material.dart';
import 'package:countdown_timer/countdown_timer.dart';
class MyWidget extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return CountdownTimer(
      endTime: DateTime.now().millisecondsSinceEpoch + 10000,
      onEnd: () {
        // Timer ended
      },
      textStyle: TextStyle(fontSize: 30),
    );
  }
}

Метод 3: использование комбинации StreamBuilder и Stream. periodic()

import 'package:flutter/material.dart';
import 'dart:async';
class MyWidget extends StatefulWidget {
  @override
  _MyWidgetState createState() => _MyWidgetState();
}
class _MyWidgetState extends State<MyWidget> {
  Stream<int> _timerStream;
  int _seconds = 0;
  @override
  void initState() {
    super.initState();
    _timerStream = Stream.periodic(Duration(seconds: 1), (i) => i);
  }
  @override
  void dispose() {
    super.dispose();
  }
  @override
  Widget build(BuildContext context) {
    return StreamBuilder<int>(
      stream: _timerStream,
      builder: (context, snapshot) {
        if (snapshot.hasData) {
          _seconds = snapshot.data;
        }
        return Text('Seconds: $_seconds');
      },
    );
  }
}

Это всего лишь несколько примеров того, как можно использовать таймер в виджете Flutter. Выберите метод, который лучше всего соответствует вашим потребностям, и реализуйте его соответствующим образом.