Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/9.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

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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.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 如何在VideoPlayerController.file().initialize()之前返回小部件;完成了吗?_Flutter_Dart - Fatal编程技术网

Flutter 如何在VideoPlayerController.file().initialize()之前返回小部件;完成了吗?

Flutter 如何在VideoPlayerController.file().initialize()之前返回小部件;完成了吗?,flutter,dart,Flutter,Dart,我目前正在尝试返回FutureBuilder()中的小部件。下面是我的代码的样子: FutureBuilder: Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: Text('Content'), ), body: FutureBuilder<String>( future: downloadRequest(),

我目前正在尝试返回
FutureBuilder()
中的小部件。下面是我的代码的样子:

FutureBuilder:

Widget build(BuildContext context)
{
  return Scaffold(
    appBar: AppBar(
      title: Text('Content'),
    ),
    body: FutureBuilder<String>(
      future: downloadRequest(),
        builder: (BuildContext context, AsyncSnapshot<String> snapshot)
        {
          if(snapshot.hasData)
          {
            if(arguments["file_type"] == "video/mp4")
            {
              _controller = VideoPlayerController.file(new File(snapshot.data));

              _initializeVideoPlayerFuture = _controller.initialize();

              _initializeVideoPlayerFuture.whenComplete(() => buildVideo());
            }
            else
            {
              return Center(
                child:
                  Text("Invalid data type")
                );
            }
          }
          else
          {
            return SizedBox(
              child: CircularProgressIndicator(),
              width: 60,
              height: 60,
            );
          }
        }
    ),
  );
小部件构建(构建上下文)
{
返回脚手架(
appBar:appBar(
标题:文本(“内容”),
),
正文:未来建设者(
future:downloadRequest(),
生成器:(BuildContext上下文,异步快照)
{
if(snapshot.hasData)
{
如果(参数[“文件类型”]=“视频/mp4”)
{
_controller=VideoPlayerController.file(新文件(snapshot.data));
_initializeVideoPlayerFuture=_controller.initialize();
_初始化视频播放器未来。当完成(()=>buildVideo())时;
}
其他的
{
返回中心(
儿童:
文本(“无效数据类型”)
);
}
}
其他的
{
返回大小框(
子对象:CircularProgressIndicator(),
宽度:60,
身高:60,
);
}
}
),
);
构建视频:

Future<Column> buildVideo() async
  {
    return Column(
      children: <Widget>[
        AspectRatio(
          aspectRatio: _controller.value.aspectRatio,
          child: VideoPlayer(_controller),
        ),
        FloatingActionButton(
          onPressed: () {
            setState(() {
              if (_controller.value.isPlaying) {
                _controller.pause();
              }
              else {
                _controller.play();
              }
            });
          },
          child: Icon(
            _controller.value.isPlaying ? Icons.pause : Icons
                .play_arrow,
          ),
        ),
      ],
    );
}
Future buildVideo()异步
{
返回列(
儿童:[
AspectRatio(
aspectRatio:_controller.value.aspectRatio,
子项:视频播放器(_控制器),
),
浮动操作按钮(
已按下:(){
设置状态(){
if(_controller.value.isPlaying){
_controller.pause();
}
否则{
_controller.play();
}
});
},
子:图标(
_controller.value.isplay?图标。暂停:图标
.弹一箭,
),
),
],
);
}
问题在于,由于此代码在
FutureBuilder()
中运行,因此需要返回
小部件
。如果运行上述代码,则会抛出错误


当我等待
\u initializeVideoPlayerFuture
完成时,如何显示微调器小部件?

FutureBuilder
官方文档中有一个关于如何使用的示例代码it@pskink你明白我想做什么吗?
FutureBuilder
类文档在使用
V时没有示例ideoPlayerController.file().initialize().whenComplete();
调用所有异步任务(下载请求后接_controller.initialize)在一些
async
方法中,将其
Future
返回值传递给您的
FutureBuilder
,这是一个更好的解决方案。谢谢。
FutureBuilder
官方文档中有一个关于如何使用的示例代码it@pskink你明白我想做什么吗?
FutureBuilder
class文档在使用
VideoPlayerController.file().initialize().whenComplete();
在一些
async
方法中调用所有异步任务(downloadRequest,后跟_controller.initialize),并将其
Future
返回值传递给
FutureBuilder
这是一个更好的解决方案。谢谢。