twonly-app/lib/src/views/components/video_player_wrapper.dart
otsmr b7e6cbfc2f
Some checks are pending
Flutter analyze & test / flutter_analyze_and_test (push) Waiting to run
crop images and small improvements
2026-04-06 13:35:36 +02:00

59 lines
1.4 KiB
Dart

import 'dart:async';
import 'dart:io';
import 'package:flutter/material.dart';
import 'package:video_player/video_player.dart';
class VideoPlayerWrapper extends StatefulWidget {
const VideoPlayerWrapper({
required this.videoPath,
super.key,
});
final File videoPath;
@override
State<VideoPlayerWrapper> createState() => _VideoPlayerWrapperState();
}
class _VideoPlayerWrapperState extends State<VideoPlayerWrapper> {
late VideoPlayerController _controller;
@override
void initState() {
super.initState();
_controller = VideoPlayerController.file(
widget.videoPath,
videoPlayerOptions: VideoPlayerOptions(
mixWithOthers: true,
),
);
unawaited(
_controller.initialize().then((_) async {
if (context.mounted) {
await _controller.setLooping(true);
await _controller.play();
setState(() {});
}
}),
);
}
@override
void dispose() {
unawaited(_controller.dispose());
super.dispose();
}
@override
Widget build(BuildContext context) {
return Center(
child: _controller.value.isInitialized
? AspectRatio(
aspectRatio: _controller.value.aspectRatio,
child: VideoPlayer(_controller),
)
: const CircularProgressIndicator(), // Show loading indicator while initializing
);
}
}