This commit is contained in:
		@@ -1,4 +1,5 @@
 | 
			
		||||
import 'package:flutter/material.dart';
 | 
			
		||||
 | 
			
		||||
import 'package:cached_video_player_plus/cached_video_player_plus.dart';
 | 
			
		||||
 | 
			
		||||
class VideoControlsOverlay extends StatelessWidget {
 | 
			
		||||
 
 | 
			
		||||
@@ -1,21 +1,26 @@
 | 
			
		||||
import 'package:flutter/material.dart';
 | 
			
		||||
import 'package:cached_video_player_plus/cached_video_player_plus.dart';
 | 
			
		||||
import 'package:cached_network_image/cached_network_image.dart';
 | 
			
		||||
import 'package:f0ckapp/models/MediaItem.dart';
 | 
			
		||||
import 'package:f0ckapp/widgets/VideoOverlay.dart';
 | 
			
		||||
import 'dart:async';
 | 
			
		||||
 | 
			
		||||
class VideoWidget extends StatefulWidget {
 | 
			
		||||
import 'package:flutter/material.dart';
 | 
			
		||||
 | 
			
		||||
import 'package:cached_video_player_plus/cached_video_player_plus.dart';
 | 
			
		||||
import 'package:cached_network_image/cached_network_image.dart';
 | 
			
		||||
import 'package:flutter_riverpod/flutter_riverpod.dart';
 | 
			
		||||
 | 
			
		||||
import 'package:f0ckapp/models/MediaItem.dart';
 | 
			
		||||
import 'package:f0ckapp/widgets/VideoOverlay.dart';
 | 
			
		||||
import 'package:f0ckapp/providers/MediaProvider.dart';
 | 
			
		||||
 | 
			
		||||
class VideoWidget extends ConsumerStatefulWidget {
 | 
			
		||||
  final MediaItem details;
 | 
			
		||||
  final bool isActive;
 | 
			
		||||
 | 
			
		||||
  const VideoWidget({super.key, required this.details, required this.isActive});
 | 
			
		||||
 | 
			
		||||
  @override
 | 
			
		||||
  State createState() => _VideoWidgetState();
 | 
			
		||||
  ConsumerState<VideoWidget> createState() => _VideoWidgetState();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
class _VideoWidgetState extends State<VideoWidget> {
 | 
			
		||||
class _VideoWidgetState extends ConsumerState<VideoWidget> {
 | 
			
		||||
  late CachedVideoPlayerPlusController _controller;
 | 
			
		||||
  bool _showControls = false;
 | 
			
		||||
  Timer? _hideControlsTimer;
 | 
			
		||||
@@ -34,10 +39,26 @@ class _VideoWidgetState extends State<VideoWidget> {
 | 
			
		||||
    setState(() {});
 | 
			
		||||
 | 
			
		||||
    _controller.addListener(() => setState(() {}));
 | 
			
		||||
 | 
			
		||||
    if (widget.isActive) {
 | 
			
		||||
      _controller.play();
 | 
			
		||||
    }
 | 
			
		||||
    _controller.setLooping(true);
 | 
			
		||||
 | 
			
		||||
    final muted = ref.read(mediaProvider).muted;
 | 
			
		||||
    _controller.setVolume(muted ? 0.0 : 1.0);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  @override
 | 
			
		||||
  void didUpdateWidget(covariant VideoWidget oldWidget) {
 | 
			
		||||
    super.didUpdateWidget(oldWidget);
 | 
			
		||||
    if (widget.isActive != oldWidget.isActive) {
 | 
			
		||||
      if (widget.isActive) {
 | 
			
		||||
        _controller.play();
 | 
			
		||||
      } else {
 | 
			
		||||
        _controller.pause();
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  @override
 | 
			
		||||
@@ -47,24 +68,13 @@ class _VideoWidgetState extends State<VideoWidget> {
 | 
			
		||||
    super.dispose();
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  @override
 | 
			
		||||
  void didUpdateWidget(VideoWidget oldWidget) {
 | 
			
		||||
    super.didUpdateWidget(oldWidget);
 | 
			
		||||
    if (widget.isActive) {
 | 
			
		||||
      _controller.play();
 | 
			
		||||
    } else {
 | 
			
		||||
      _controller.pause();
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  void _onTap({bool ctrlButton = false}) {
 | 
			
		||||
    if (!ctrlButton) {
 | 
			
		||||
      setState(() => _showControls = !_showControls);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (_showControls) {
 | 
			
		||||
      _hideControlsTimer?.cancel();
 | 
			
		||||
      _hideControlsTimer = Timer(Duration(seconds: 2), () {
 | 
			
		||||
      _hideControlsTimer = Timer(const Duration(seconds: 2), () {
 | 
			
		||||
        setState(() => _showControls = false);
 | 
			
		||||
      });
 | 
			
		||||
    }
 | 
			
		||||
@@ -72,6 +82,12 @@ class _VideoWidgetState extends State<VideoWidget> {
 | 
			
		||||
 | 
			
		||||
  @override
 | 
			
		||||
  Widget build(BuildContext context) {
 | 
			
		||||
    final muted = ref.watch(mediaProvider).muted;
 | 
			
		||||
    if (_controller.value.isInitialized &&
 | 
			
		||||
        _controller.value.volume != (muted ? 0.0 : 1.0)) {
 | 
			
		||||
      _controller.setVolume(muted ? 0.0 : 1.0);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    bool isAudio = widget.details.mime.startsWith('audio');
 | 
			
		||||
 | 
			
		||||
    return Column(
 | 
			
		||||
@@ -91,7 +107,7 @@ class _VideoWidgetState extends State<VideoWidget> {
 | 
			
		||||
                        imageUrl: widget.details.coverUrl,
 | 
			
		||||
                        fit: BoxFit.cover,
 | 
			
		||||
                        placeholder: (context, url) =>
 | 
			
		||||
                            CircularProgressIndicator(),
 | 
			
		||||
                            const CircularProgressIndicator(),
 | 
			
		||||
                        errorWidget: (context, url, error) => Image.asset(
 | 
			
		||||
                          'assets/images/music.webp',
 | 
			
		||||
                          fit: BoxFit.contain,
 | 
			
		||||
@@ -100,7 +116,7 @@ class _VideoWidgetState extends State<VideoWidget> {
 | 
			
		||||
                      )
 | 
			
		||||
                    : _controller.value.isInitialized
 | 
			
		||||
                    ? CachedVideoPlayerPlus(_controller)
 | 
			
		||||
                    : Center(child: CircularProgressIndicator()),
 | 
			
		||||
                    : const Center(child: CircularProgressIndicator()),
 | 
			
		||||
              ),
 | 
			
		||||
              if (_controller.value.isInitialized && _showControls) ...[
 | 
			
		||||
                IgnorePointer(
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user