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
这是一个更好的解决方案。谢谢。