如何显示YouTube视频链接从数据库中抖动

问题描述

我有一个此类,它处理来自未来函数的数据:

Class MyYoutube {
    final int index ;
    final String link; // youtube Link
  MyYoutube(this.index,this.link); }

要获得此链接我有页面使用了Future函数

import 'dart:convert';
import 'package:http/http.dart' as http;
import 'dart:convert';
import 'package:Flutter/material.dart';
import 'package:youtube_player_Flutter/youtube_player_Flutter.dart';
class VideoPlayer extends StatefulWidget {
  @override
  _VideoPlayerState createState() => _VideoPlayerState();
}
class _VideoPlayerState extends State<VideoPlayer> {
  YoutubePlayerController _controller = YoutubePlayerController(
      initialVideoId: '',flags: YoutubePlayerFlags(
        autoplay: false,mute: false,));
  @override
  Widget build(BuildContext context) {
    Future<List> MyVideo() async {
      var url = ' 10.0.0.2/api/link.PHP';
      var respons = http.get(url);
      var data = jsonDecode(respons.body);
      for (var x in data) {
        MyYoutube newvideo = MyYoutube(x['index'],x['title_k'],x['title_a'],x['aya'],x['link'],x['activity_k'],x['activity_a'],x['act_id']);
        video.add(newvideo);
      }
      return video;
    }
    return Scaffold(
        body: Container(
      child: YoutubePlayer(
        controller: _controller,showVideoProgressIndicator: true,progressIndicatorColor: Colors.blueAccent,),));
  }
}

问题是如何在YouTube控制器中使用从未来获得的链接

解决方法

非常感谢,我自己解决了问题,将Video Player Controller移到了将来的构建器中,并将初始Video Id的值设置为链接获取表单数据库。

 return FutureBuilder(
        future: fetchDigrees(),builder: (context,snapshot) {
          Map rdata = ModalRoute.of(context).settings.arguments;
          var lang = rdata['lang'];
          if (snapshot.data == null) {
            return Center(
              child: Text("Loading"),);
          } else {
            YoutubePlayerController _controller = YoutubePlayerController(
                initialVideoId: snapshot.data[0].link,flags: YoutubePlayerFlags(
                  autoPlay: false,mute: false,));
            return Container(

显示视频播放器,并且正常工作

YoutubePlayer(
                        controller: _controller,showVideoProgressIndicator: true,progressIndicatorColor: Colors.blueAccent,),