12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182 |
- part of 'control_board.dart';
- class _ProgressBar extends StatefulWidget {
- @override
- State<StatefulWidget> createState() => _ProgressBarState();
- }
- class _ProgressBarState extends State<_ProgressBar> {
- final playerController = Get.find<IPlayerController>() as VidPlayerController;
- @override
- void initState() {
- WidgetsBinding.instance!.addPostFrameCallback((timeStamp) {
- if (mounted) {
- playerController.eventHandler.addListener(onControllerEvent);
- }
- });
- super.initState();
- }
- @override
- Widget build(BuildContext context) {
- final controller = playerController;
- var index = controller.currentFrameIndex.toDouble();
- var max = 100.0;
- if (index < 0) {
- index = 0;
- } else {
- max = controller.totalFramesCount.toDouble();
- }
- return SliderTheme(
- data: const SliderThemeData(
- trackHeight: 18,
- // activeTrackColor: Colors.red,
- thumbColor: Colors.white,
- trackShape: _FullWidthTrackShape(),
- ),
- child: Slider(
- max: max,
- value: index,
- onChanged: (v) {
- controller.pause();
- controller.gotoFrame(v.toInt());
- },
- ),
- );
- }
- void onControllerEvent(Object sender, VidPlayerEvent e) {
- if (e is VidPlayerFrameIndexChangeEvent) {
- onPlayFrameIndexChanged(e);
- }
- }
- void onPlayFrameIndexChanged(VidPlayerFrameIndexChangeEvent e) {
- if (mounted) {
- setState(() {});
- }
- }
- }
- // https://juejin.cn/post/6959703051586240549
- class _FullWidthTrackShape extends RoundedRectSliderTrackShape {
- const _FullWidthTrackShape();
- @override
- Rect getPreferredRect({
- required RenderBox parentBox,
- Offset offset = Offset.zero,
- required SliderThemeData sliderTheme,
- bool isEnabled = false,
- bool isDiscrete = false,
- }) {
- final double trackHeight = sliderTheme.trackHeight ?? 2;
- final double trackLeft = offset.dx;
- final double trackTop =
- offset.dy + (parentBox.size.height - trackHeight) / 2;
- // 让轨道宽度等于 Slider 宽度
- final double trackWidth = parentBox.size.width;
- return Rect.fromLTWH(trackLeft, trackTop, trackWidth, trackHeight);
- }
- }
|