问题描述
因此,我试图创建一个功能,当我们单击图标按钮时,它将更改视频路径。它将使用字符串更改视频路径。我正在使用print(“ $ videoname”)来确保字符串更改,并且确实如此。但是它仍然无法正常运行,使用videoplayercontroller.assets(): 这是我试图制作的代码
String videoname="Video/Intro.mp4";
Container(
child:Column(
crossAxisAlignment: CrossAxisAlignment.start,children: [
ChewieListItem(
videoPlayerController: VideoPlayerController.asset(videoname),looping: false,),Container(
margin: EdgeInsets.symmetric(vertical: 20.0),height: 100.0,child: ListView(
scrollDirection: Axis.horizontal,children: [
IconButton(
icon:Icon(Icons.people),onPressed: (){
videoname="Video/Intro.mp4";
print("$videoname");
},IconButton(
icon:Icon(Icons.personal_video),onPressed: (){
videoname="Video/Intro1.mp4";
print("$videoname");
},],)
解决方法
您可以在下面复制粘贴运行完整代码
步骤1:在key: UniqueKey()
中使用ChewieListItem
步骤2:在setState
中使用onPressed
代码段
ChewieListItem(
key: UniqueKey(),videoPlayerController: VideoPlayerController.asset(videoname),looping: false,),IconButton(
icon: Icon(Icons.people),onPressed: () {
setState(() {
videoname = "Video/Intro.mp4";
print("$videoname");
});
},IconButton(
icon: Icon(Icons.personal_video),onPressed: () {
setState(() {
videoname = "Video/Intro1.mp4";
print("$videoname");
});
},
工作演示
完整代码
import 'package:flutter/material.dart';
import 'package:video_player/video_player.dart';
import 'package:chewie/chewie.dart';
class ChewieListItem extends StatefulWidget {
// This will contain the URL/asset path which we want to play
final VideoPlayerController videoPlayerController;
final bool looping;
ChewieListItem({
@required this.videoPlayerController,this.looping,Key key,}) : super(key: key);
@override
_ChewieListItemState createState() => _ChewieListItemState();
}
class _ChewieListItemState extends State<ChewieListItem> {
ChewieController _chewieController;
@override
void initState() {
super.initState();
print("ChewieListItem initState");
// Wrapper on top of the videoPlayerController
_chewieController = ChewieController(
videoPlayerController: widget.videoPlayerController,aspectRatio: 16 / 9,// Prepare the video to be played and display the first frame
autoInitialize: true,looping: widget.looping,// Errors can occur for example when trying to play a video
// from a non-existent URL
errorBuilder: (context,errorMessage) {
return Center(
child: Text(
errorMessage,style: TextStyle(color: Colors.white),);
},);
}
@override
Widget build(BuildContext context) {
return Padding(
padding: const EdgeInsets.all(8.0),child: Chewie(
controller: _chewieController,);
}
@override
void dispose() {
print("ChewieListItem dispose");
super.dispose();
// IMPORTANT to dispose of all the used resources
widget.videoPlayerController.dispose();
_chewieController.dispose();
}
}
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',theme: ThemeData(
primarySwatch: Colors.blue,visualDensity: VisualDensity.adaptivePlatformDensity,home: MyHomePage(title: 'Flutter Demo Home Page'),);
}
}
class MyHomePage extends StatefulWidget {
MyHomePage({Key key,this.title}) : super(key: key);
final String title;
@override
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
String videoname = "Video/Intro.mp4";
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text(widget.title),body: Container(
child:
Column(crossAxisAlignment: CrossAxisAlignment.start,children: [
ChewieListItem(
key: UniqueKey(),Container(
margin: EdgeInsets.symmetric(vertical: 20.0),height: 100.0,child: ListView(
scrollDirection: Axis.horizontal,children: [
IconButton(
icon: Icon(Icons.people),onPressed: () {
setState(() {
videoname = "Video/Intro.mp4";
print("$videoname");
});
},IconButton(
icon: Icon(Icons.personal_video),onPressed: () {
setState(() {
videoname = "Video/Intro1.mp4";
print("$videoname");
});
},],])),);
}
}
,
<a class="navbar-brand" href="#">
<p class="paragraph">REVOL</p>
</a>
<!-- or -->
<a class="navbar-brand" href="#">
<p style="font-family: 'Helvetica Neue Bold'">REVOL</p>
</a>
应该适合您
setState