recordResumeTimer function

Future<bool> recordResumeTimer(
  1. {required RecordResumeTimerOptions options}
)

Resumes the recording timer if it is not already running and can be paused/resumed.

Returns true if the timer was successfully resumed, otherwise false.

Example usage:

recordResumeTimer(RecordResumeTimerOptions(
  parameters: RecordResumeTimerParameters(
    isTimerRunning: false,
    canPauseResume: true,
    recordElapsedTime: 60,
    recordStartTime: DateTime.now().millisecondsSinceEpoch,
    showAlert: (alert) => print(alert.message),
    updateRecordStartTime: (time) => print("New start time: $time"),
    updateRecordTimerInterval: (interval) => print("New interval: $interval"),
    updateIsTimerRunning: (isRunning) => print("Is timer running: $isRunning"),
    updateCanPauseResume: (canPause) => print("Can pause/resume: $canPause"),
    getUpdatedAllParams: () => updatedParameters,
  ),
));

Implementation

Future<bool> recordResumeTimer(
    {required RecordResumeTimerOptions options}) async {
  var parameters = options.parameters.getUpdatedAllParams();
  var recordStartTime = parameters.recordStartTime;
  var recordTimerInterval = parameters.recordTimerInterval;
  var isTimerRunning = parameters.isTimerRunning;

  // Utility function to show an alert message
  void showAlertMessage(String message) {
    if (parameters.showAlert != null) {
      parameters.showAlert!(
        message: message,
        type: 'danger',
        duration: 3000,
      );
    }
  }

  // Logic to resume the timer
  if (!parameters.isTimerRunning && parameters.canPauseResume) {
    recordStartTime = DateTime.now().millisecondsSinceEpoch -
        (parameters.recordElapsedTime * 1000);
    parameters.updateRecordStartTime(recordStartTime);

    recordTimerInterval =
        Timer.periodic(const Duration(seconds: 1), (timer) async {
      final optionsUpdate = RecordUpdateTimerOptions(
          recordElapsedTime: parameters.recordElapsedTime,
          recordStartTime: parameters.recordStartTime!,
          updateRecordElapsedTime: parameters.updateRecordElapsedTime,
          updateRecordingProgressTime: parameters.updateRecordingProgressTime);

      recordUpdateTimer(options: optionsUpdate);
      parameters = parameters.getUpdatedAllParams();

      if (parameters.recordPaused ||
          parameters.recordStopped ||
          parameters.roomName == '' ||
          parameters.roomName == null) {
        timer.cancel();
        parameters.updateRecordTimerInterval(null);
        isTimerRunning = false;
        parameters.updateIsTimerRunning(isTimerRunning);
        parameters.updateCanPauseResume(false);
      }
    });

    parameters.updateRecordTimerInterval(recordTimerInterval);
    isTimerRunning = true;
    parameters.updateIsTimerRunning(isTimerRunning);
    parameters.updateIsTimerRunning(true);
    parameters.updateCanPauseResume(false);
    return true;
  } else {
    showAlertMessage(
        'Can only pause or resume after 15 seconds of starting or pausing or resuming recording');
    return false;
  }
}