我在YouTube播放器颤动时有一些问题
我一直在尝试自己解决这个问题,但我只是接受了我不能。所以我在这里向你们寻求帮助。我正在尝试使用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 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论