我正在使用Chewie包来显示视频:https://pub.dev/packages/chewie
一切都运行得很好。但是,当我试图在有人退出视频会话时处理控制器时,我得到了错误。
首先是我使用的代码,它由一个带有向后箭头的扁平按钮控制。我的想法是关闭并处理视频屏幕。
void userExited() async {
_chewieController.dispose();
//dispose();
print('USER EXITED!!');
Navigator.pop(context);
}
然而,每当我按下按钮时,我就会得到一个:
在释放后使用了ChewieController。
错误消息。我应该指出的是,在我的代码中没有任何其他地方调用dispose()。我的问题是,我需要做些什么来消除这个错误。此外,如何正确地处理chewie视频控制器并无错误地关闭屏幕。
下面是完整的代码:
class VideoScreen extends StatefulWidget {
final MediaItem mediaItem;
VideoScreen(this.mediaItem);
@override
_VideoScreenState createState() => _VideoScreenState();
}
class _VideoScreenState extends State<VideoScreen> {
ChewieController _chewieController;
VideoPlayerController _videoPlayerController;
void initState() {
super.initState();
_videoPlayerController = VideoPlayerController.network(
widget.mediaItem.itemUrl,
);
// Wrapper on top of the videoPlayerController
_chewieController = ChewieController(
videoPlayerController: _videoPlayerController,
//aspectRatio: 16 / 9,
aspectRatio: _videoPlayerController.value.aspectRatio,
showControlsOnInitialize: false,
fullScreenByDefault: false,
// Prepare the video to be played and display the first frame
autoInitialize: true,
looping: false,
autoPlay: true,
// Errors can occur for example when trying to play a video
// from a non-existent URL
errorBuilder: (context, errorMessage) {
return Center(
child: Text(
errorMessage,
style: TextStyle(color: Colors.white),
),
);
},
);
_videoPlayerController.addListener(() {
if (_videoPlayerController.value.position ==
_videoPlayerController.value.duration) {
print('video Ended');
closeScreen();
Navigator.pop(context);
}
});
}
void closeScreen() async {
final _media = Provider.of<Media>(context, listen: false);
_media.increasePlayCount(widget.mediaItem.id);
final _auth = Provider.of<Auth>(context, listen: false);
_media.createMediaHistory(_auth.user.uid, widget.mediaItem.id);
dispose();
print('VIDEO FINISHED ... CLOSE!!');
Navigator.pop(context);
}
void userExited() async {
_chewieController.dispose();
//dispose();
print('USER EXITED!!');
Navigator.pop(context);
}
@override
Widget build(BuildContext context) {
final screenWidth = MediaQuery.of(context).size.width;
return Scaffold(
body: SafeArea(
child: Stack(
children: <Widget>[
Padding(
padding: const EdgeInsets.all(8.0),
child: Chewie(
controller: _chewieController,
),
),
Positioned(
left: screenWidth / 20,
top: screenWidth / 20,
child: FloatingActionButton(
onPressed: () {
userExited();
},
elevation: 0.0,
child: Icon(Icons.arrow_back_ios),
// backgroundColor: Color(0xFF1976D2),
backgroundColor: Colors.blue,
),
),
],
),
),
);
}
}
如有任何建议,我们将不胜感激。
非常感谢
转载请注明出处:http://www.jxbyjx.net/article/20230518/1701020.html