dispose method

Future<void> dispose()

When finish running timer, it need to dispose.

Implementation

Future<void> dispose() async {
  if (_elapsedTime.isClosed) {
    throw Exception(
      'This instance is already disposed. Please create timer object.',
    );
  }

  final timer = _timer;
  if (timer != null && timer.isActive) {
    timer.cancel();
  }

  // Make sure elapsed time is closed before rawTimeController. This avoids
  // failure when command `flutter test -x slow` is used to execute the tests.
  // Otherwise, the subscriptions must be canceled before disposing the
  // watch.
  await _elapsedTime.close();

  await Future.wait<void>([
    _rawTimeController.close(),
    _secondTimeController.close(),
    _minuteTimeController.close(),
    _recordsController.close(),
    _onStoppedController.close(),
    _onEndedController.close(),
  ]);
}