我是一位真正的初学者。 我有一个关于使用[youtube_player_flutter:^ 6.1.1]播放youtube视频的问题 我用youtube链接创建了一个Json文件,我想将其与[youtube_player_flutter:^ 6.1.1]链接。但它始终显示错误消息[只能在初始化程序中访问静态成员]
@override
Widget build(BuildContext context) {
// this function is called before the build so that
// the string assettoload is avialable to the DefaultAssetBuilder
setasset();
// and now we return the FutureBuilder to load and decode JSON
return FutureBuilder(
future:
DefaultAssetBundle.of(context).loadString(assettoload, cache: true),
builder: (context, snapshot) {
List mydata = json.decode(snapshot.data.toString());
if (mydata == null) {
return Scaffold(
body: Center(
child: Text(
"Loading",
),
),
);
} else {
return quizpage(mydata: mydata);
}
},
);
}
}
class quizpage extends StatefulWidget {
final dynamic mydata;
////////var youtubeUrl;
quizpage({Key key, @required this.mydata}) : super(key: key);
@override
_quizpageState createState() => _quizpageState(mydata);
}
class _quizpageState extends State<quizpage> {
var mydata;
_quizpageState(this.mydata);
int marks = 0;
int i = 1;
@override
void setState(fn) {
if (mounted) {
super.setState(fn);
}
}
YoutubePlayerController _controller;
@override
void initState() {
_controller = YoutubePlayerController(
initialVideoId: YoutubePlayer.convertUrlToId(mydata[4]["1"]));
super.initState();
}
void nextquestion() {
setState(() {
if (i < 10) {
i++;
} else {
Navigator.of(context).pushReplacement(MaterialPageRoute(
builder: (context) => resultpage(marks: marks),
));
}
问题是我想让[String videoURL]播放json数据文件中的视频列表。
谢谢。
答案 0 :(得分:0)
可能性是您对变量mydata
进行了两次编码。这是您应该遵循的格式。并且为了利用构造函数中StatefulWidget中的变量,请使用widget.mydata
。不必两次声明。
代码:
class Quizpage extends StatefulWidget {
final dynamic mydata;
quizpage({Key key, @required this.mydata}) : super(key: key);
@override
_QuizpageState createState() => _QuizpageState();
}
class _QuizpageState extends State<Quizpage> {
/*
You can make use of your mydata in this class like this:
widget.mydata, and you will be able to make it work
*/
Color colortoshow = Colors.indigoAccent;
Color right = Colors.green;
Color wrong = Colors.red;
int marks = 0;
int i = 1;
// String videoURL ="https://www.youtube.com/watch?v=2OAdfB2U88A&t=593s";
YoutubePlayerController _controller;
// Use like this to make use of your array mydata
String videoURL = widget.myData[4]["1"];
@override
void initState() {
_controller = YoutubePlayerController(
initialVideoId: YoutubePlayer.convertUrlToId(videoURL));
super.initState();
}
}
这也是出于编码的角度。请遵循Flutter中正确的类命名方法。始终使用 CamelCase 或将课程的第一个字母大写。这是编写代码时的最佳实践。希望以上内容在某种程度上对您有所帮助。谢谢:)