【发布时间】:2021-04-26 03:05:38
【问题描述】:
我正在尝试让 initialVideoId 等待 keyy 函数等待,但我不知道如何去吧。
我正在使用 Flutter,我的工作是从 TMDB 获取视频密钥,但不知道如何使 initialVideoId 等待 JSON 数据在访问之前准备好。
getVideoUrl() async {
http.Response response = await http.get(
'https://api.themoviedb.org/3/movie/${widget.movieId}/videos?api_key=$kApiKey');
// print(json.decode(response.body));
String data = response.body;
// data.length;
var keyy = jsonDecode(data)['results'][0]['key'];
// results[0].key
print(keyy);
}
// String link = 'e9waCtSVoZ0';
YoutubePlayerController _controller;
bool isPlaerReady = false;
@override
void initState() {
super.initState();
print(widget.movieId);
getVideoUrl();
// _controller = YoutubePlayerController(initialVideoId: keyy);
this._controller = YoutubePlayerController(
initialVideoId: keyy,
flags: YoutubePlayerFlags(
mute: false,
autoPlay: true,
disableDragSeek: true,
loop: false,
isLive: false,
// forceHideAnnotation: true,
forceHD: false,
enableCaption: true,
),
)..addListener(_videoPlayerListner);
}
void _videoPlayerListner() {
print(_controller.value.playerState.toString());
}
void isPlayReady(){
}
@override
void deactivate() {
_controller.pause();
super.deactivate();
}
@override
void dispose() {
_controller.dispose();
super.dispose();
}
@override
Widget build(BuildContext context) {
// return Text(getVideoUrl());
//
return YoutubePlayer(
controller: _controller,
showVideoProgressIndicator: true,
progressIndicatorColor: Colors.blueAccent,
topActions: <Widget>[
SizedBox(width: 8.0),
Expanded(
child: Text(
_controller.metadata.title,
style: TextStyle(
color: Colors.white,
fontSize: 18.0,
),
overflow: TextOverflow.ellipsis,
maxLines: 1,
),
),
],
onReady: () {
isPlaerReady;
},
onEnded: (data) {},
);
}
}
我按要求将我的构建方法添加到问题中
【问题讨论】:
-
您可以在问题中添加您班级的
build方法吗? -
您可以在 FutureBuilder 小部件中调用 getVideoUrl(),然后根据响应,做任何您需要的事情
-
@Stel 你能解释得更好吗?我对颤动很安静
-
@fartem 我已经做到了
-
FutureBuilder 是一个小部件,您可以调用一个返回 Future 的函数(将要解决的问题),然后您可以在屏幕上构建一些东西。你可以在这里阅读更多信息:api.flutter.dev/flutter/widgets/FutureBuilder-class.html