Flutter 颤振:“;实例成员';小部件';can';不能在初始值设定项中访问。”;
我正在尝试获取Flutter 颤振:“;实例成员';小部件';can';不能在初始值设定项中访问。”;,flutter,dart,Flutter,Dart,我正在尝试获取youtube\u player\u flatter软件包的一个youtube视频链接,它是在我的VideoCard.dart文件中编写的。现在,我将视频链接作为参数传递给我创建的构造函数,但我得到的实例成员“widget”无法在初始值设定项中访问。 我认为问题在于使用无状态小部件,但即使将其更改为有状态,问题仍然存在 class _VideoCardState extends State<VideoCard> { // static String videoID
youtube\u player\u flatter
软件包的一个youtube视频链接,它是在我的VideoCard.dart
文件中编写的。现在,我将视频链接作为参数传递给我创建的构造函数,但我得到的实例成员“widget”无法在初始值设定项中访问。
我认为问题在于使用无状态小部件,但即使将其更改为有状态,问题仍然存在
class _VideoCardState extends State<VideoCard> {
// static String videoID = 'PQSagzssvUQ';
String videoId = widget.url;
@override
void initState() {
// TODO: implement initState
super.initState();
videoId = widget.url;
}
YoutubePlayerController _controller = YoutubePlayerController(
initialVideoId: videoId,
flags: YoutubePlayerFlags(
autoPlay: true,
mute: false,
),
);
@override
Widget build(BuildContext context) {
return Container(
height: 200,
child: Container(
decoration: BoxDecoration(
color: Color(0xffff8f8f8),
borderRadius: BorderRadius.circular(15),
),
child: YoutubePlayer(
controller: _controller,
liveUIColor: Colors.amber,
showVideoProgressIndicator: true,
),
),
);
}
}
class\u VideoCardState扩展状态{
//静态字符串videoID='PQSagzssvUQ';
字符串videoId=widget.url;
@凌驾
void initState(){
//TODO:实现initState
super.initState();
videoId=widget.url;
}
YoutubePlayerController\u controller=YoutubePlayerController(
initialVideoId:videoId,
标志:YoutubePlayerFlags(
自动播放:对,
哑巴:错,
),
);
@凌驾
小部件构建(构建上下文){
返回容器(
身高:200,
子:容器(
装饰:盒子装饰(
颜色:颜色(0xffff8f8f8),
边界半径:边界半径。圆形(15),
),
孩子:YoutubePlayer(
控制器:_控制器,
liveUIColor:Colors.amber,
showVideoProgressIndicator:对,
),
),
);
}
}
更新1:
class _VideoCardState extends State<VideoCard> {
String get videoId => widget.url;
// videoId = YoutubePlayer.convertUrlToId(
// "https://www.youtube.com/watch?v=S9bCLPwzSC0")
// .toString();
@override
void initState() {
super.initState();
// print(widget.url);
videoId = widget.url;
}
YoutubePlayerController _controller = YoutubePlayerController(
initialVideoId: videoId, ------------------------> The instance member 'videoId' can't be accessed in an initializer.
flags: YoutubePlayerFlags(
autoPlay: true,
mute: false,
),
);
@override
Widget build(BuildContext context) {
return Container(
height: 200,
child: Container(
decoration: BoxDecoration(
color: Color(0xffff8f8f8),
borderRadius: BorderRadius.circular(15),
),
child: YoutubePlayer(
controller: _controller,
liveUIColor: Colors.amber,
showVideoProgressIndicator: true,
),
),
);
}
}
class\u VideoCardState扩展状态{
字符串get videoId=>widget.url;
//videoId=youtubeplyer.convertUrlToId(
// "https://www.youtube.com/watch?v=S9bCLPwzSC0")
//.toString();
@凌驾
void initState(){
super.initState();
//打印(widget.url);
videoId=widget.url;
}
YoutubePlayerController\u controller=YoutubePlayerController(
initialVideoId:videoId,--------------------------->无法在初始值设定项中访问实例成员“videoId”。
标志:YoutubePlayerFlags(
自动播放:对,
哑巴:错,
),
);
@凌驾
小部件构建(构建上下文){
返回容器(
身高:200,
子:容器(
装饰:盒子装饰(
颜色:颜色(0xffff8f8f8),
边界半径:边界半径。圆形(15),
),
孩子:YoutubePlayer(
控制器:_控制器,
liveUIColor:Colors.amber,
showVideoProgressIndicator:对,
),
),
);
}
}
您可以尝试使用以下代码:
class _VideoCardState extends State<VideoCard> {
String get videoId => widget.url;
YoutubePlayerController get _controller => YoutubePlayerController(
initialVideoId: videoId,
flags: YoutubePlayerFlags(
autoPlay: true,
mute: false,
),
);
...
}
class\u VideoCardState扩展状态{
字符串get videoId=>widget.url;
YoutubePlayerController get _controller=>YoutubePlayerController(
initialVideoId:videoId,
标志:YoutubePlayerFlags(
自动播放:对,
哑巴:错,
),
);
...
}
这就是我的工作原理:
class _VideoCardState extends State<VideoCard> {
late String videoId;
late YoutubePlayerController _controller;
@override
void initState() {
super.initState();
videoId = YoutubePlayer.convertUrlToId(widget.url).toString();
_controller = YoutubePlayerController(
initialVideoId: videoId,
flags: YoutubePlayerFlags(
autoPlay: false,
mute: false,
),
);
}
@override
Widget build(BuildContext context) {
return Container(
height: 200,
child: Container(
decoration: BoxDecoration(
color: Color(0xffff8f8f8),
borderRadius: BorderRadius.circular(15),
),
child: YoutubePlayer(
controller: _controller,
liveUIColor: Colors.amber,
showVideoProgressIndicator: true,
),
),
);
}
}
class\u VideoCardState扩展状态{
晚字符串videoId;
后期YoutubePlayerController\u控制器;
@凌驾
void initState(){
super.initState();
videoId=youtubeplyer.convertUrlToId(widget.url.toString();
_控制器=YoutubePlayerController(
initialVideoId:videoId,
标志:YoutubePlayerFlags(
自动播放:错误,
哑巴:错,
),
);
}
@凌驾
小部件构建(构建上下文){
返回容器(
身高:200,
子:容器(
装饰:盒子装饰(
颜色:颜色(0xffff8f8f8),
边界半径:边界半径。圆形(15),
),
孩子:YoutubePlayer(
控制器:_控制器,
liveUIColor:Colors.amber,
showVideoProgressIndicator:对,
),
),
);
}
}
在哪里?在init状态内部?或者当我第一次声明时?删除它会引发错误:必须初始化不可为空的变量“videoId”。
nope仍然不工作。我已经用你建议的代码更新了我的代码现在还不走运。我仍然得到无法在初始值设定项中访问实例成员“videoId”。
在initialVideoId:videoId,