sarbagyastha / youtube_player_flutter

A Flutter plugin for inline playback or streaming of YouTube videos using the official iFrame Player API.
https://youtube.sarbagyastha.com.np
BSD 3-Clause "New" or "Revised" License
697 stars 801 forks source link

Bottom navigation bar and status bar disappears on exiting full screen for entire application.[BUG] #892

Open Aryan20apr opened 10 months ago

Aryan20apr commented 10 months ago

On exiting the full screen, the application shows various glitches. The phone's bottom navigation bar and status bar disappear on exiting full screen for the entire application, and appear only when dragged, as in the absence of SafeArea. Also the list of user-chats (using Socket.io)- Two chat labels appear together instead of one for every new message.

Here is my code:

import 'dart:convert';
import 'dart:developer';

import 'package:educationadmin/Modals/VideoResourcesModal.dart';
import 'package:educationadmin/screens/common/ChatView.dart';
import 'package:flutter/material.dart';
import 'package:youtube_player_flutter/youtube_player_flutter.dart';

class YouTubePlayerScreen extends StatefulWidget {

 const YouTubePlayerScreen({super.key,required this.video});
 final Videos video ;
  @override
  YouTubePlayerScreenState createState() => YouTubePlayerScreenState();

}

class YouTubePlayerScreenState extends State<YouTubePlayerScreen> {
  late YoutubePlayerController _controller;
  late YoutubePlayerFlags _flags;
  String _videoLink = ''; // Store the fetched video link

  @override
  void initState() {
    super.initState();
    // Set flags for the YouTube player (e.g., captions)
    _flags = const YoutubePlayerFlags(
      autoPlay: true,
      mute: false,
      captionLanguage: 'en', // Replace with your desired caption language code
    );

     _videoLink = widget.video.link!;
        // Update the controller with the fetched video link
        _controller = YoutubePlayerController(
          initialVideoId: YoutubePlayer.convertUrlToId(_videoLink)!,
          flags: _flags,
        );

  }

  @override
  Widget build(BuildContext context) {
    return SafeArea(

      child: YoutubePlayerBuilder(
        onExitFullScreen: (){
          log('Full Screen');

        },
        onEnterFullScreen: (){
         // _controller.toggleFullScreenMode();
        },
        player:YoutubePlayer(
                    controller: _controller,
                    showVideoProgressIndicator: true,
                    onReady: () {
                      // Video is ready to play
                    },
                    onEnded: (data) {
                      // Video has ended
                    },
                  ),
        builder: (context,player) {
          return Scaffold(

            appBar: AppBar(
              title: Text('${widget.video.title}'),
            ),
            body:Column(mainAxisAlignment: MainAxisAlignment.spaceBetween,children: [

            player,

            if(widget.video.isLive!=null && widget.video.isLive!)
              Expanded(child: Padding(
                padding: const EdgeInsets.only(top:4.0),
                child: ChatView(video: widget.video,),
              ))
            ])
          );
        }
      ),
    );
  }

  @override
  void dispose() {
    _controller.dispose();
    super.dispose();
  }
}
krisgun commented 7 months ago

I'm also having this issue!

Rochak-ES commented 7 months ago

I'm also having the same issue

Rochak-ES commented 7 months ago

Using the code inside onExitFullScreenMode is solving the issue for me.

YoutubePlayerBuilder(
      onExitFullScreen: () {
        SystemChrome.setEnabledSystemUIMode(
          SystemUiMode.manual,
          overlays: SystemUiOverlay.values,
        );
      },
      player: YoutubePlayer(
        bottomActions: [
          CurrentPosition(),
          ProgressBar(isExpanded: true),
          FullScreenButton(
            controller: _controller,
          ),
        ],
        controller: _controller,
      ),
      builder: (context, player) => player
      )