Quantcast
Channel: Active questions tagged youtube-api - Stack Overflow
Viewing all articles
Browse latest Browse all 3717

Watch YouTube video with youtube_player_iframe Flutter

$
0
0

I would like to know how to open a YouTube video and showing it on my Flutter app with a video player that allow the user to stop the video, moving forward, backward just dragging the finger on the bottom line of the video.I was thinking to use youtube_player_iframe since I read on the internet that this is the only widget that allows to open YouTube videos (for iOS, youtube_player for Android) so I installed it and copy-pasted the example from docs and fixed some errors.

If anyone could help me to understand why it doesn't work I'll be very glad.

To install, from terminal run : flutter pub add youtube_player_iframe

Or just add the dependence : youtube_player_iframe: ^2.0.0

This is the code, just copy-paste and it can be run :

import 'dart:developer';import 'package:flutter/foundation.dart';import 'package:flutter/material.dart';import 'package:flutter/services.dart';import 'package:youtube_player_iframe/youtube_player_iframe.dart';void main() {  WidgetsFlutterBinding.ensureInitialized();  runApp(YoutubeApp());}///class YoutubeApp extends StatelessWidget {  @override  Widget build(BuildContext context) {    return MaterialApp(      title: 'Youtube Player IFrame Demo',      theme: ThemeData(        primarySwatch: Colors.deepPurple,        iconTheme: const IconThemeData(color: Colors.deepPurpleAccent),      ),      debugShowCheckedModeBanner: false,      home: YoutubeAppDemo(),    );  }}///class YoutubeAppDemo extends StatefulWidget {  @override  _YoutubeAppDemoState createState() => _YoutubeAppDemoState();}class _YoutubeAppDemoState extends State<YoutubeAppDemo> {  late YoutubePlayerController _controller;  String urlVideoFromYouTube = 'v0RWej7Sqg4'; //this is the last part of the YouTube url https://www.youtube.com/watch?v=v0RWej7Sqg4 copy-pasted by me  @override  void initState() {    super.initState();    _controller = YoutubePlayerController(      initialVideoId: urlVideoFromYouTube,      params: const YoutubePlayerParams(        playlist: ['nPt8bK2gbaU',//Default playlist'K18cpp_-gP8','iLnmTe5Q2Qw','_WoCV4c6XOE','KmzdUe0RSJo','6jZDSSZZxjQ','p2lYr3vM_1w','7QUtEmBT_-w','34_PXCzGw1M',        ],        startAt: const Duration(minutes: 1, seconds: 36),        showControls: true,        showFullscreenButton: true,        desktopMode: true,        privacyEnhanced: true,        useHybridComposition: true,      ),    );    _controller.onEnterFullscreen = () {      SystemChrome.setPreferredOrientations([        DeviceOrientation.landscapeLeft,        DeviceOrientation.landscapeRight,      ]);      log('Entered Fullscreen');    };    _controller.onExitFullscreen = () {      log('Exited Fullscreen');    };  }  @override  Widget build(BuildContext context) {    const player = YoutubePlayerIFrame();    return YoutubePlayerControllerProvider(      // Passing controller to widgets below.      controller: _controller,      child: Scaffold(        appBar: AppBar(          title: const Text('Youtube Player IFrame'),        ),        body: LayoutBuilder(          builder: (context, constraints) {            if (kIsWeb && constraints.maxWidth > 800) {              return Row(                crossAxisAlignment: CrossAxisAlignment.start,                children: [                  const Expanded(child: player),                  const SizedBox(                    width: 500,                    child: SingleChildScrollView(                      child: Controls(),                    ),                  ),                ],              );            }            return ListView(              children: [                player,                const Controls(),              ],            );          },        ),      ),    );  }  @override  void dispose() {    _controller.close();    super.dispose();  }}///class Controls extends StatelessWidget {  ///  const Controls();  @override  Widget build(BuildContext context) {    return Padding(      padding: const EdgeInsets.all(16),      child: Column(        crossAxisAlignment: CrossAxisAlignment.start,        children: [          // _space,          // MetaDataSection(),          // _space,          // SourceInputSection(),          // _space,          // PlayPauseButtonBar(),          // _space,          // VolumeSlider(),          // _space,          // PlayerStateSection(),        ],      ),    );  }  Widget get _space => const SizedBox(height: 10);}

Viewing all articles
Browse latest Browse all 3717

Latest Images

Trending Articles



Latest Images

<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>