startMeetingProgressTimer function

void startMeetingProgressTimer(
  1. {required StartMeetingProgressTimerOptions options}
)

Starts a timer to track the progress of a meeting.

This function calculates the elapsed time from the provided start time, updates the time every second, and formats it to HH:MM:SS.

  • If the meeting is invalidated or the room name is empty, the timer stops.

Example Usage:

startMeetingProgressTimer(
  options: StartMeetingProgressTimerOptions(
    startTime: DateTime.now().millisecondsSinceEpoch ~/ 1000,
    parameters: StartMeetingProgressTimerParameters(
      updateMeetingProgressTime: (time) => print("Meeting Time: $time"),
      validated: true,
      roomName: "room1",
      getUpdatedAllParams: () => {
        'validated': true,
        'roomName': 'room1',
      },
    ),
  ),
);

Implementation

void startMeetingProgressTimer({
  required StartMeetingProgressTimerOptions options,
}) {
  final startTime = options.startTime;
  var parameters = options.parameters;

  // Utility function to calculate elapsed time based on start time.
  int calculateElapsedTime(int startTime) {
    final currentTimeInSeconds = DateTime.now().millisecondsSinceEpoch ~/ 1000;
    return currentTimeInSeconds - startTime;
  }

  // Utility function to format time in HH:MM:SS format.
  String padNumber(int number) => number.toString().padLeft(2, '0');

  String formatTime(int timeInSeconds) {
    final hours = timeInSeconds ~/ 3600;
    final minutes = (timeInSeconds % 3600) ~/ 60;
    final seconds = timeInSeconds % 60;
    return '${padNumber(hours)}:${padNumber(minutes)}:${padNumber(seconds)}';
  }

  var elapsedTime = calculateElapsedTime(startTime);

  // Initialize and start the timer
  // ignore: unused_local_variable
  late Timer timer;
  timer = Timer.periodic(const Duration(seconds: 1), (timer) {
    elapsedTime++;
    final formattedTime = formatTime(elapsedTime);
    parameters.updateMeetingProgressTime(formattedTime);

    // Get updated parameters
    final updatedParams = parameters.getUpdatedAllParams();
    final validated = updatedParams.validated;
    final roomName = updatedParams.roomName;

    // Stop the timer if the meeting is invalidated or room name is missing
    if (!validated || roomName.isEmpty) {
      timer.cancel();
    }
  });
}