Currently, I'm using it to show videos in list. I would like to achieve the similar effect like Facebook or Twitter does (when scrolling the videos are automatically played).
import 'package:flutter/material.dart';
import 'package:pod_player/pod_player.dart';
import 'package:visibility_detector/visibility_detector.dart';
class PlayVideoFromYoutube extends StatefulWidget {
const PlayVideoFromYoutube({Key? key}) : super(key: key);
@override
State<PlayVideoFromYoutube> createState() => _PlayVideoFromVimeoIdState();
}
class _PlayVideoFromVimeoIdState extends State<PlayVideoFromYoutube> {
final videos = [
'https://youtu.be/A3ltMaM6noM',
'https://www.youtube.com/watch?v=TjBA6jy4ako',
'https://www.youtube.com/watch?v=HqFgRHTuDyc',
];
late final PodPlayerController controller;
final videoTextFieldCtr = TextEditingController();
@override
void initState() {
controller = PodPlayerController(
playVideoFrom: PlayVideoFrom.youtube(videos[0]),
podPlayerConfig: const PodPlayerConfig(autoPlay: true),
);
super.initState();
}
@override
void dispose() {
controller.dispose();
super.dispose();
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: const Text('Youtube player')),
body: SafeArea(
child: ListView(
children: [
const SizedBox(height: 200),
_videoPlayer(videos[0]),
const SizedBox(height: 900),
_videoPlayer(videos[1]),
const SizedBox(height: 900),
_videoPlayer(videos[2]),
const SizedBox(height: 200),
],
),
),
);
}
Widget _videoPlayer(String videoUrl) {
return VisibilityDetector(
key: Key(videoUrl),
onVisibilityChanged: (VisibilityInfo info) {
if (info.visibleFraction == 1) {
if (controller.isVideoPlaying) return;
controller.changeVideo(
playVideoFrom: PlayVideoFrom.youtube(videoUrl),
playerConfig: const PodPlayerConfig(autoPlay: true),
);
} else {
controller.pause();
}
},
child: PodVideoPlayer(
controller: controller,
),
);
}
}
controller.changeVideo(
playVideoFrom: PlayVideoFrom.youtube(videoUrl),
playerConfig: const PodPlayerConfig(autoPlay: true),
);
child: PodVideoPlayer(
controller: controller,
videoThumbnail: DecorationImage(
image: NetworkImage(_thumbnailUrl(videoUrl)),
),
),