extractLine static method

LrcLine? extractLine(
  1. String line
)

Implementation

static LrcLine? extractLine(String line) {
  final regexp = RegExp(
    r'\[(\d{1,}):(\d{2})(?:\.(\d{1,}))?\]',
    multiLine: true,
  );
  final matches = regexp.allMatches(line);
  if (matches.isEmpty) return null;
  final durations = <Duration>[];
  for (var match in matches) {
    final minutes = match.group(1);
    final seconds = match.group(2);
    var milliseconds = match.group(3) ?? '0';
    if (milliseconds.length > 3) {
      milliseconds = milliseconds.substring(0, 3);
    }
    Duration duration = Duration(
      minutes: int.parse(minutes!),
      seconds: int.parse(seconds!),
      milliseconds: int.parse(milliseconds.padRight(3, '0')),
    );
    durations.add(duration);
    line = line.replaceAll(match.group(0)!, '');
  }
  return LrcLine(durations: durations, text: line);
}