dispose method
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(),
]);
}