【发布时间】:2020-04-27 01:28:50
【问题描述】:
我正在使用 Fluter 开发一个 APP。在 APP 中有一个 PageViews 列表,每个 PageView 在出现时都会加载和播放视频。任何 PageView 都会在视频消失时停止播放。现在我有一个问题。当我在PageViews之间慢慢滑动时,会同时出现两个PageView。每个 PageView 都显示为一个部分。但是这两个 PageView 都在播放视频。我想知道我是否可以检查当前的 PageView 完全消失,然后我停止播放视频。当下一个 PageView 完全显示时,它开始播放视频。所以它不会同时在两个 PageView 中播放视频。谁能帮帮我?
import 'package:video_player/video_player.dart';
import 'package:flutter/material.dart';
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
// This widget is the root of your application.
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: MultiplePage(),
);
}
}
class MultiplePage extends StatefulWidget {
@override
_MultiplePageState createState() => _MultiplePageState();
}
class _MultiplePageState extends State<MultiplePage> {
PageController _controller;
void scrollListener() {
if (_controller.page == _controller.page.roundToDouble()) {
print(_controller.page);
}
}
@override
void initState() {
super.initState();
_controller = PageController()..addListener(scrollListener);
}
@override
Widget build(BuildContext context) {
return PageView.builder(
controller: _controller,
scrollDirection: Axis.vertical,
itemBuilder: (context, position) {
return VideoApp();
},
);
}
}
class VideoApp extends StatefulWidget {
@override
_VideoAppState createState() => _VideoAppState();
}
class _VideoAppState extends State<VideoApp> {
VideoPlayerController _controller;
@override
void initState() {
super.initState();
_controller = VideoPlayerController.network(
'http://www.sample-videos.com/video123/mp4/720/big_buck_bunny_720p_20mb.mp4')
..initialize().then((_) {
// Ensure the first frame is shown after the video is initialized, even before the play button has been pressed.
setState(() {
_controller.play();
});
});
}
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Video Demo',
home: Scaffold(
body: Center(
child: _controller.value.initialized
? AspectRatio(
aspectRatio: _controller.value.aspectRatio,
child: VideoPlayer(_controller),
)
: Container(),
),
),
);
}
@override
void dispose() {
super.dispose();
_controller.pause();
_controller.dispose();
}
}
【问题讨论】:
标签: flutter video-player