Flutter 当按下后退按钮时,在颤振中处理后,使用了Videoplayercontroller的获取错误
我正在使用丘伊视频包以全屏横向模式播放一个视频。当我按下手机上的“后退”按钮时,我发现videoplayercontroller在处理后被使用了。首先,我处理了我的chewiecontroller,然后在dispose方法中处理了videocontroller,但仍然遇到了这个问题。我找不到问题所在,所以按下了返回按钮上的错误。下面是我的代码Flutter 当按下后退按钮时,在颤振中处理后,使用了Videoplayercontroller的获取错误,flutter,video,Flutter,Video,我正在使用丘伊视频包以全屏横向模式播放一个视频。当我按下手机上的“后退”按钮时,我发现videoplayercontroller在处理后被使用了。首先,我处理了我的chewiecontroller,然后在dispose方法中处理了videocontroller,但仍然遇到了这个问题。我找不到问题所在,所以按下了返回按钮上的错误。下面是我的代码 import 'package:chewie/chewie.dart'; import 'package:flutter/material.dart';
import 'package:chewie/chewie.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:video_player/video_player.dart';
import 'package:newrit/main.dart';
import 'package:wakelock/wakelock.dart';
class StoryVideoPlayer extends StatefulWidget {
final String video_url;
const StoryVideoPlayer({Key key, this.video_url}) : super(key: key);
@override
_StoryVideoPlayerState createState() => _StoryVideoPlayerState(video_url);
}
class _StoryVideoPlayerState extends State<StoryVideoPlayer> {
final String video_url;
_StoryVideoPlayerState(this.video_url);
VideoPlayerController controller;
ChewieController _chewieController;
@override
void initState() {
// TODO: implement initState
super.initState();
Wakelock.enable();
SystemChrome.setPreferredOrientations([
DeviceOrientation.landscapeRight,
DeviceOrientation.landscapeLeft,
]);
print('video_url: $video_url');
controller = VideoPlayerController.network(video_url);
controller.addListener(() {
setState(() {});
checkVideo();
});
_chewieController = ChewieController(
videoPlayerController: controller,
allowFullScreen: false,
allowMuting: false,
fullScreenByDefault: true,
looping: false,
autoPlay: true,
allowedScreenSleep: false,
deviceOrientationsAfterFullScreen: const [
DeviceOrientation.landscapeLeft,
DeviceOrientation.landscapeRight,
],
);
}
@override
Widget build(BuildContext context) {
SystemChrome.setPreferredOrientations([
DeviceOrientation.landscapeLeft,
DeviceOrientation.landscapeRight,
]);
return WillPopScope(
onWillPop: (){
Navigator.pop(context, true);
},
child: SafeArea(
child: Scaffold(
body: Stack(
alignment: Alignment.bottomCenter,
children: <Widget>[
Chewie(
controller: _chewieController,
),
Align(
alignment: FractionalOffset.topLeft,
child: Padding(
padding: const EdgeInsets.only(left: 15.0, top: 15.0),
child: Material(
type: MaterialType.transparency, //Makes it usable on any background color, thanks @IanSmith
child: Ink(
decoration: BoxDecoration(
border: Border.all(color: Colors.white, width: 4.0),
shape: BoxShape.circle,
),
child: InkWell(
onTap: () => Navigator.pop(context, true),
child: Padding(
padding: const EdgeInsets.fromLTRB(5.0,5.0,7.0,5.0),
child: Icon(Icons.arrow_back_ios,
size: useMobileLayout ? 22.0 : 35.0, color: Colors.white,),
)),
),
),
),
),
],
),
),
),
);
}
void checkVideo() {
if(controller.value.position == Duration(seconds: 0, minutes: 0, hours: 0)) {
}
if(controller.value.position == controller.value.duration) {
print('video Ended');
}
}
@override
void dispose() {
_dispose();
super.dispose();
}
void _dispose() async{
SystemChrome.setPreferredOrientations([
DeviceOrientation.portraitUp,
DeviceOrientation.portraitDown,
]);
_chewieController.dispose();
await controller.dispose();
Wakelock.disable();
}
}
import'包:chuie/chuie.dart';
进口“包装:颤振/材料.省道”;
导入“包:flifter/services.dart”;
导入“package:video_player/video_player.dart”;
导入“包:newrit/main.dart”;
导入“包:wakelock/wakelock.dart”;
类StoryVideoPlayer扩展StatefulWidget{
最终字符串视频链接;
const-StoryVideoPlayer({Key-Key,this.video\u-url}):super(Key:Key);
@凌驾
_StoryVideoPlayerState createState()=>\u StoryVideoPlayerState(视频\u url);
}
类_StoryVideoPlayerState扩展状态{
最终字符串视频链接;
_StoryVideoPlayerState(此.video\u url);
视频播放控制器;
咀嚼控制器;
@凌驾
void initState(){
//TODO:实现initState
super.initState();
Wakelock.enable();
SystemChrome.setPreferredOrientations([
设备定向,景观权,
DeviceOrientation.landscapeLeft,
]);
打印('video_url:$video_url');
控制器=VideoPlayerController.network(视频url);
controller.addListener(){
setState((){});
检查视频();
});
_咀嚼控制器=咀嚼控制器(
视频播放器控制器:控制器,
allowFullScreen:错误,
允许计算:false,
FullScreen默认值:true,
循环:错误,
自动播放:对,
允许睡眠:错误,
全屏显示后的设备定向:常数[
DeviceOrientation.landscapeLeft,
设备定向,景观权,
],
);
}
@凌驾
小部件构建(构建上下文){
SystemChrome.setPreferredOrientations([
DeviceOrientation.landscapeLeft,
设备定向,景观权,
]);
返回式示波器(
onWillPop:(){
pop(上下文,true);
},
儿童:安全区(
孩子:脚手架(
主体:堆栈(
对齐:对齐.bottomCenter,
儿童:[
丘伊(
控制器:_cheuicontroller,
),
对齐(
对齐:分馏loffset.topLeft,
孩子:填充(
填充:仅限常量边集(左:15.0,顶:15.0),
儿童:材料(
type:MaterialType.transparency,//可用于任何背景色,谢谢@IanSmith
孩子:墨水(
装饰:盒子装饰(
边框:边框。全部(颜色:Colors.white,宽度:4.0),
形状:BoxShape.circle,
),
孩子:InkWell(
onTap:()=>Navigator.pop(上下文,true),
孩子:填充(
填充:LTRB(5.0,5.0,7.0,5.0)中的常数边集,
子:图标(Icons.arrow\u back\u ios、,
尺寸:useMobileLayout?22.0:35.0,颜色:彩色。白色,),
)),
),
),
),
),
],
),
),
),
);
}
void checkVideo(){
if(controller.value.position==持续时间(秒:0,分钟:0,小时:0)){
}
if(controller.value.position==controller.value.duration){
打印(“视频结束”);
}
}
@凌驾
无效处置(){
_处置();
super.dispose();
}
void\u dispose()异步{
SystemChrome.setPreferredOrientations([
DeviceOrientation.Up,
DeviceOrientation.down,
]);
_chouicontroller.dispose();
wait controller.dispose();
Wakelock.disable();
}
}
有解决方案吗?没有,我没有得到解决方案,所以我设计了自己的视频控制器。我没有用咀嚼控制器。