Ниже приведена демонстрация с использованием плагина для видеопроигрывателя .Вместо Map
, согласно рекомендации Реми в комментариях к вашему вопросу, я создал базовую модель видео со свойствами заголовка и контроллера и добавил их к List
.Намного проще использовать List
(с соответствующими моделями), если вы хотите создать канал, похожий на YouTube (скорее всего, с использованием ListView
или CustomScrollView
).Убедитесь, что ваш pubspec.yaml
обновлен с вашими видео активами (и измените имена файлов ниже), и пример должен работать для вас.Приведенные ниже слушатели будут распечатывать видео при инициализации и продолжительности.
import 'package:flutter/material.dart';
import 'package:video_player/video_player.dart';
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Video Player Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: MyHomePage(title: 'Flutter Video Player Demo'),
);
}
}
class MyHomePage extends StatefulWidget {
MyHomePage({Key key, this.title}) : super(key: key);
final String title;
@override
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
List<VideoModel> _controllers = [];
@override
void initState() {
super.initState();
_controllers = [
VideoModel(
title: 'Alpha',
controller: VideoPlayerController.asset('assets/videos/small.mp4')),
VideoModel(
title: 'Beta',
controller: VideoPlayerController.asset('assets/videos/small.mp4')),
VideoModel(
title: 'Gamma',
controller: VideoPlayerController.asset('assets/videos/small.mp4')),
];
_controllerLooper();
}
_controllerLooper() {
for (VideoModel video in _controllers) {
final listener = () {
if (video.controller.value.initialized) {
print('${video.title} - video initialized');
}
print('${video.title} duration: ${video.controller.value.position}');
};
video.controller
..addListener(listener)
..setVolume(1.0)
..setLooping(true)
..initialize();
}
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text(widget.title),
),
body: ListView.builder(
itemCount: _controllers.length,
itemBuilder: (context, index) {
final controller = _controllers[index].controller;
return GestureDetector(
onTap: () {
if (controller.value.isPlaying) {
controller.pause();
} else if (!controller.value.isPlaying) {
controller.play();
}
},
child: AspectRatio(
aspectRatio: 16.0 / 9.0,
child: VideoPlayer(_controllers[index].controller),
),
);
}),
);
}
}
class VideoModel {
VideoModel({this.title, this.controller});
final String title;
final VideoPlayerController controller;
}