Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Flutter 引发了另一个异常:必须提供控制器才能播放视频_Flutter_Dart - Fatal编程技术网

Flutter 引发了另一个异常:必须提供控制器才能播放视频

Flutter 引发了另一个异常:必须提供控制器才能播放视频,flutter,dart,Flutter,Dart,我想播放一个视频并将其暂停在“后退”按钮上,但当我单击该按钮时,我遇到了一个错误。此错误显示引发了另一个异常:您必须提供一个控制器来播放我没有得到的视频,而我丢失了播放该视频的控制器 import 'package:chewie/chewie.dart'; import 'package:flutter/material.dart'; import 'package:video_player/video_player.dart'; class ChewieListItem extends St

我想播放一个视频并将其暂停在“后退”按钮上,但当我单击该按钮时,我遇到了一个错误。此错误显示引发了另一个异常:您必须提供一个控制器来播放我没有得到的视频,而我丢失了播放该视频的控制器

import 'package:chewie/chewie.dart';
import 'package:flutter/material.dart';
import 'package:video_player/video_player.dart';

class ChewieListItem extends StatefulWidget {
  VideoPlayerController videoPlayerController;
  bool looping;
  // This will contain the URL/asset path which we want to play
  @override
  _ChewieListItemState createState() => _ChewieListItemState();
}

class _ChewieListItemState extends State<ChewieListItem> {
  final videoPlayerController = VideoPlayerController.network('https://bk7l2g37dx53-hls-live.5centscdn.com/adom/5b97b7d64a64c7cd54c18b07e93570a1.sdp/index.m3u8');
  ChewieController _chewieController;

  @override
  void initState() {

    super.initState();
    // Wrapper on top of the videoPlayerController
    _chewieController = ChewieController(
      videoPlayerController: widget.videoPlayerController,
      aspectRatio: 16 / 9,
      // Prepare the video to be played and display the first frame
      autoInitialize: true,
      looping: widget.looping,
      // 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),
          ),
        );
      },
    );
  }

  @override
  Widget build(BuildContext context) {
    return Padding(
      padding: const EdgeInsets.all(8.0),
      child: Chewie(
        controller: _chewieController,
      ),
    );
  }

  @override
  void dispose() {
    super.dispose();
    // IMPORTANT to dispose of all the used resources
    widget.videoPlayerController.dispose();
    _chewieController.dispose();
  }
}
import'包:chuie/chuie.dart';
进口“包装:颤振/材料.省道”;
导入“package:video_player/video_player.dart”;
类chuvieListItem扩展StatefulWidget{
视频播放控制器;
布尔循环;
//这将包含我们想要播放的URL/资产路径
@凌驾
_ChevieListItemState createState()=>\u ChevieListItemState();
}
类_chuvieListItemState扩展状态{
最终videoPlayerController=videoPlayerController.network('https://bk7l2g37dx53-hls-live.5centscdn.com/adom/5b97b7d64a64c7cd54c18b07e93570a1.sdp/index.m3u8');
咀嚼控制器;
@凌驾
void initState(){
super.initState();
//videoPlayerController顶部的包装
_咀嚼控制器=咀嚼控制器(
videoPlayerController:widget.videoPlayerController,
专题:16/9,
//准备要播放的视频并显示第一帧
自动初始化:true,
循环:widget.looping,
//例如,尝试播放视频时可能会发生错误
//从一个不存在的URL
errorBuilder:(上下文,errorMessage){
返回中心(
子:文本(
错误消息,
样式:TextStyle(颜色:Colors.white),
),
);
},
);
}
@凌驾
小部件构建(构建上下文){
返回填充(
填充:常数边集全部(8.0),
孩子:朱伊(
控制器:_cheuicontroller,
),
);
}
@凌驾
无效处置(){
super.dispose();
//重要的是要处置所有已使用的资源
widget.videoPlayerController.dispose();
_chouicontroller.dispose();
}
}

widget.videoPlayerController引用了类chuvieListItem中的变量,它没有初始化。您初始化的是类_chuvieListItemState内的

您可以从类chuvieListItem中删除变量,并在不使用widget单词的情况下使用它:

import 'package:chewie/chewie.dart';
import 'package:flutter/material.dart';

import 'package:video_player/video_player.dart';

class ChewieListItem extends StatefulWidget {
  bool looping;
  // This will contain the URL/asset path which we want to play
  @override
  _ChewieListItemState createState() => _ChewieListItemState();
}

class _ChewieListItemState extends State<ChewieListItem> {
  final videoPlayerController = VideoPlayerController.network('https://bk7l2g37dx53-hls-live.5centscdn.com/adom/5b97b7d64a64c7cd54c18b07e93570a1.sdp/index.m3u8');
  ChewieController _chewieController;

  @override
  void initState() {

  super.initState();
  // Wrapper on top of the videoPlayerController
    _chewieController = ChewieController(
    videoPlayerController: videoPlayerController,
    aspectRatio: 16 / 9,
    // Prepare the video to be played and display the first frame
    autoInitialize: true,
    looping: widget.looping,
    // 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),
        ),
      );
    },
  );
}



@override
  Widget build(BuildContext context) {
    return Padding(
      padding: const EdgeInsets.all(8.0),
      child: Chewie(
        controller: _chewieController,
      ),
    );
  }

  @override
  void dispose() {
    super.dispose();
    // IMPORTANT to dispose of all the used resources
    widget.videoPlayerController.dispose();
    _chewieController.dispose();
  }
}
import'包:chuie/chuie.dart';
进口“包装:颤振/材料.省道”;
导入“package:video_player/video_player.dart”;
类chuvieListItem扩展StatefulWidget{
布尔循环;
//这将包含我们想要播放的URL/资产路径
@凌驾
_ChevieListItemState createState()=>\u ChevieListItemState();
}
类_chuvieListItemState扩展状态{
最终videoPlayerController=videoPlayerController.network('https://bk7l2g37dx53-hls-live.5centscdn.com/adom/5b97b7d64a64c7cd54c18b07e93570a1.sdp/index.m3u8');
咀嚼控制器;
@凌驾
void initState(){
super.initState();
//videoPlayerController顶部的包装
_咀嚼控制器=咀嚼控制器(
videoPlayerController:videoPlayerController,
专题:16/9,
//准备要播放的视频并显示第一帧
自动初始化:true,
循环:widget.looping,
//例如,尝试播放视频时可能会发生错误
//从一个不存在的URL
errorBuilder:(上下文,errorMessage){
返回中心(
子:文本(
错误消息,
样式:TextStyle(颜色:Colors.white),
),
);
},
);
}
@凌驾
小部件构建(构建上下文){
返回填充(
填充:常数边集全部(8.0),
孩子:朱伊(
控制器:_cheuicontroller,
),
);
}
@凌驾
无效处置(){
super.dispose();
//重要的是要处置所有已使用的资源
widget.videoPlayerController.dispose();
_chouicontroller.dispose();
}
}

我对您的代码进行了更改。请查看它是否有效getter“videoPlayerController”未为类“chuvieListItem”定义。我在此行小部件上发现此错误。videoPlayerController.dispose();我刚刚从这个声明widget.videoPlayerController.dispose()中删除了widget关键字;现在一切都很好。Stel你是个很棒的人非常非常感谢你保佑你让我再浪费两天