aves/plugins/aves_video/lib/src/ab_repeat.dart
2024-03-31 00:17:37 +01:00

33 lines
1,019 B
Dart

import 'package:flutter/foundation.dart';
import 'package:flutter/widgets.dart';
class ABRepeat {
final int? start, end;
ABRepeat({this.start, this.end});
ABRepeat sanitize() {
if (start != null && end != null && start! > end!) {
return ABRepeat(start: end, end: start);
}
return ABRepeat(start: start, end: end);
}
int clamp(int position) => (start != null && end != null) ? position.clamp(start!, end!) : position;
}
mixin ABRepeatMixin {
int get currentPosition;
ValueNotifier<ABRepeat?> abRepeatNotifier = ValueNotifier(null);
void toggleABRepeat() => _setAbRepeat(abRepeatNotifier.value != null ? null : ABRepeat());
void resetABRepeat() => _setAbRepeat(ABRepeat());
void setABRepeatStart() => _setAbRepeat(ABRepeat(start: currentPosition, end: abRepeatNotifier.value?.end));
void setABRepeatEnd() => _setAbRepeat(ABRepeat(start: abRepeatNotifier.value?.start, end: currentPosition));
void _setAbRepeat(ABRepeat? v) => abRepeatNotifier.value = v?.sanitize();
}