我在YouTube播放器颤动时有一些问题

发布于 2025-01-27 04:56:16 字数 3737 浏览 3 评论 0原文

我一直在尝试自己解决这个问题,但我只是接受了我不能。所以我在这里向你们寻求帮助。我正在尝试使用YouTube Player Flutter插件,并创建了我选择使用ListTile,ListView和FutureBuilder的频道的视频列表。我要做的是:当我单击一些视频时,我希望它播放。因此,我正在尝试使用fenuredetector,但是问题是我不知道如何使用YouTube播放器作为ONTAP或手势检测器的播放器。我不知道我是否做得很好,我接受了更好的方法或解决方案的建议;我的问题之一是:LateInitializationError:field'_controller@25000317'尚未初始化。因此,老实说,我不知道该如何使用它,但是当我使用它时,这是我的问题。因此,如果我不使用that,则必须更改我的代码。来自:晚期YouTubePlayerController _controller;到:YouTubePlayerController? _控制器;如果我这样做,我必须使用_ Controller!而且我有一个错误:NULL检查运算符在空值上使用,因此我尝试了很多方法不使用NULL检查操作员在空值上使用,但我不能使用。如果你们也可以帮助我,我会很高兴的。

这是代码


import 'package:flutter/material.dart';
import 'package:mood3/model/Video.dart';
import 'package:mood3/telas/Api.dart';
import 'package:youtube_player_flutter/youtube_player_flutter.dart';

class Videos extends StatefulWidget {

 @override
 State<Videos> createState() => _VideosState();
}

class _VideosState extends State<Videos> {
late YoutubePlayerController _controller;





 _listarVideos() {
   Api api = Api();
   return api.pesquisar("");
 }

 @override
 Widget build(BuildContext context) {


   return Container(

     padding: EdgeInsets.all(16),
     child: FutureBuilder<List<Video>?>(
       future: _listarVideos(),
       builder: (context, snapshot){
         switch(snapshot.connectionState){
           case ConnectionState.none:
           case ConnectionState.waiting:
             return Center(
               child: CircularProgressIndicator(),
             );
             break;
           case ConnectionState.active:
           case ConnectionState.done:
             if(snapshot.hasData){
               return ListView.separated(
                   itemBuilder: (context, index){

                     List<Video>? videos = snapshot.data;
                     Video video = videos![ index ];

                     return GestureDetector(
                       onTap: (){
                         void runYoutubeplayer() {
                           _controller = YoutubePlayerController(
                             initialVideoId: video.id.toString() ,
                             flags: YoutubePlayerFlags(
                               autoPlay: false,
                               mute: false,
                             ),
                           );
                         }
                         setState(() {
                           _controller.load(video.id.toString());

                         });

                       },
                       child: Column(
                         children: <Widget>[
                           Container(
                             height: 200,
                             decoration: BoxDecoration(
                                 image: DecorationImage(
                                     fit: BoxFit.cover,
                                     image: NetworkImage( video.imagem! )
                                 )
                             ),
                           ),
                           ListTile(
                             title: Text( video.titulo! ),
                             subtitle: Text( video.canal! ),
                           )
                         ],
                       ),
                     );

                   },
                   separatorBuilder: (context, index) => Divider(
                     height: 2,
                     color: Colors.grey,
                   ),
                   itemCount: snapshot.data!.length
               );
             }else{
               return Center(
                 child: Text("Nenhum dado a ser exibido!"),
               );

             }
             break;
         }
       },
     ),);
 }
}


I've been trying to solve this problem by myself but I just accepted that I can't. So I'm here to ask you guys for help. I'm trying to use the Youtube Player Flutter plugin and I created a List of videos from a channel that I choose using ListTile, ListView, and FutureBuilder. What i'm trying to do is: when i click on some video i want it to play. So I'm trying to use GestureDetector, but the problem is that I don't know how to use Youtube Player Flutter as a player for onTap or Gesture Detector. I don't know if I'm doing this well and I accept suggestions of better ways to do that or a solution; One of my problems is: LateInitializationError: Field '_controller@25000317' has not been initialized. So to be honest I don't know how to use it late but when i use it that's my problem. So if I don't use late I have to change my code. from: late YoutubePlayerController _controller; to: YoutubePlayerController? _controller; and if i do that i have to use _controller! and i have the error: Null check operator used on a null value So i've tried a lot of ways to not use null check operator on a null value, but i can't. If you guys can help me with that too, I will be happy.

Here's the code


import 'package:flutter/material.dart';
import 'package:mood3/model/Video.dart';
import 'package:mood3/telas/Api.dart';
import 'package:youtube_player_flutter/youtube_player_flutter.dart';

class Videos extends StatefulWidget {

 @override
 State<Videos> createState() => _VideosState();
}

class _VideosState extends State<Videos> {
late YoutubePlayerController _controller;





 _listarVideos() {
   Api api = Api();
   return api.pesquisar("");
 }

 @override
 Widget build(BuildContext context) {


   return Container(

     padding: EdgeInsets.all(16),
     child: FutureBuilder<List<Video>?>(
       future: _listarVideos(),
       builder: (context, snapshot){
         switch(snapshot.connectionState){
           case ConnectionState.none:
           case ConnectionState.waiting:
             return Center(
               child: CircularProgressIndicator(),
             );
             break;
           case ConnectionState.active:
           case ConnectionState.done:
             if(snapshot.hasData){
               return ListView.separated(
                   itemBuilder: (context, index){

                     List<Video>? videos = snapshot.data;
                     Video video = videos![ index ];

                     return GestureDetector(
                       onTap: (){
                         void runYoutubeplayer() {
                           _controller = YoutubePlayerController(
                             initialVideoId: video.id.toString() ,
                             flags: YoutubePlayerFlags(
                               autoPlay: false,
                               mute: false,
                             ),
                           );
                         }
                         setState(() {
                           _controller.load(video.id.toString());

                         });

                       },
                       child: Column(
                         children: <Widget>[
                           Container(
                             height: 200,
                             decoration: BoxDecoration(
                                 image: DecorationImage(
                                     fit: BoxFit.cover,
                                     image: NetworkImage( video.imagem! )
                                 )
                             ),
                           ),
                           ListTile(
                             title: Text( video.titulo! ),
                             subtitle: Text( video.canal! ),
                           )
                         ],
                       ),
                     );

                   },
                   separatorBuilder: (context, index) => Divider(
                     height: 2,
                     color: Colors.grey,
                   ),
                   itemCount: snapshot.data!.length
               );
             }else{
               return Center(
                 child: Text("Nenhum dado a ser exibido!"),
               );

             }
             break;
         }
       },
     ),);
 }
}


如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文