#flutter #dart
#flutter #dart
Вопрос:
В настоящее время я пытаюсь вернуть виджет в 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,
);
}
}
),
);
buildVideo:
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,
),
),
],
);
}
Проблема в том, что, поскольку этот код выполняется внутри FutureBuilder()
, он требует widget
возврата. Если я запускаю приведенный выше код, он выдает ошибку.
Как я могу отобразить виджет Spinner, пока я жду _initializeVideoPlayerFuture
завершения?
Комментарии:
1.
FutureBuilder
в официальной документации есть пример кода о том, как его использовать2. @pskink Ты все же понимаешь, что я пытаюсь сделать? В
FutureBuilder
документации по классу нет примера при использованииVideoPlayerController.file().initialize().whenComplete();
3. вызовите все ваши асинхронные задачи (downloadRequest, за которым следует _controller.initialize) внутри некоторого
async
метода и передайте егоFuture
возвращаемое значение вашемуFutureBuilder
4. Это гораздо лучшее решение. Спасибо.