微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在按下后退按钮后被摆弄得井井有条,导致Videoplayercontroller出现错误

如何解决在按下后退按钮后被摆弄得井井有条,导致Videoplayercontroller出现错误

我使用Chewie视频包在全屏横向模式下仅播放一个视频。当我按下手机的后退按钮时,我收到了videoplayercontroller被使用后的问题。首先,我处置了我的chewiecontroller,然后以处置方法处置了videocontroller,但仍然遇到了这个问题。我找不到问题所在,因此按下后退按钮时出现错误。下面是我的代码...

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,]);

    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();
  }
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。