Sonnat Project
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

67 lines
1.8 KiB

  1. import 'package:chewie/chewie.dart';
  2. import 'package:flutter/material.dart';
  3. import 'package:sonnat/core/widgets/global_loading.dart';
  4. import 'package:video_player/video_player.dart';
  5. class VideoPlayer extends StatefulWidget {
  6. final String url;
  7. const VideoPlayer({super.key, required this.url});
  8. @override
  9. State<VideoPlayer> createState() => _VideoPlayerState();
  10. }
  11. class _VideoPlayerState extends State<VideoPlayer> {
  12. late ChewieController? chewieController;
  13. late VideoPlayerController videoPlayerController;
  14. @override
  15. void initState() {
  16. super.initState();
  17. videoPlayerController = VideoPlayerController.network(widget.url);
  18. }
  19. Future<bool> initVideo() async {
  20. await videoPlayerController.initialize();
  21. chewieController = ChewieController(
  22. videoPlayerController: videoPlayerController,
  23. autoPlay: false,
  24. looping: false,
  25. autoInitialize: true,
  26. allowFullScreen: true,
  27. );
  28. return Future.value(true);
  29. }
  30. @override
  31. Widget build(BuildContext context) {
  32. if (videoPlayerController.value.isInitialized) {
  33. return AspectRatio(
  34. aspectRatio: chewieController!.aspectRatio ?? 16 / 9,
  35. child: Chewie(controller: chewieController!),
  36. );
  37. }
  38. return FutureBuilder(
  39. future: initVideo(),
  40. builder: (context, snapshot) {
  41. if (snapshot.hasData) {
  42. return AspectRatio(
  43. aspectRatio: chewieController!.aspectRatio ?? 16 / 9,
  44. child: Chewie(controller: chewieController!),
  45. );
  46. }
  47. if (snapshot.hasError) {
  48. return const Icon(Icons.error_outline);
  49. }
  50. return const GlobalLoading(isSmallSize: true);
  51. });
  52. }
  53. @override
  54. void dispose() {
  55. videoPlayerController.dispose();
  56. chewieController?.dispose();
  57. super.dispose();
  58. }
  59. }