我是 Dart 和 Dart 的新手。这让我陷了三天。我的目标是拥有一个文本框和一个按钮,而用户可以输入视频的网址并将其加载到应用程序中。希望您能够帮助我。顺便说一句,我已经有一个默认的网址,因此已经显示了视频,因此文本字段和按钮的目的是供用户更改。这就是我现在所做的。
@override
void initState() {
super.initState();
//MEDIA_URL is already declared
_controller = VideoPlayerController.network(MEDIA_URL)
..initialize().then((_) {
setState(() {
_controller = TextEditingController();
});
}
Widget _buildInput() {
return Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
TextField(
controller: _controller,
decoration: InputDecoration(hintText: "Enter the URL"),
),
Container(
alignment: Alignment.center,
child: RaisedButton(
onPressed: () => print("pressed"),
child: Text("load"),
),
),
],
);
}
最佳答案
您可以在下面复制粘贴运行完整代码
您可以对_controller
进行操作,调用pause
,然后重新初始化_controller
以播放其他视频路径
程式码片段
onPressed: () async {
await _controller.pause();
MEDIA_URL = _textEditingController.text;
_controller = VideoPlayerController.network(MEDIA_URL);
await _controller.initialize();
setState(() {});
await _controller.play();
}
工作演示完整的代码
import 'package:video_player/video_player.dart';
import 'package:flutter/material.dart';
void main() => runApp(VideoApp());
class VideoApp extends StatefulWidget {
@override
_VideoAppState createState() => _VideoAppState();
}
class _VideoAppState extends State<VideoApp> {
VideoPlayerController _controller;
TextEditingController _textEditingController = TextEditingController();
String MEDIA_URL =
'https://commondatastorage.googleapis.com/gtv-videos-bucket/sample/BigBuckBunny.mp4';
@override
void initState() {
super.initState();
_textEditingController.text =
"https://flutter.github.io/assets-for-api-docs/assets/videos/butterfly.mp4";
_controller = VideoPlayerController.network(MEDIA_URL)
..initialize().then((_) {
// Ensure the first frame is shown after the video is initialized, even before the play button has been pressed.
setState(() {});
});
}
Widget _buildInput() {
return Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
TextField(
controller: _textEditingController,
decoration: InputDecoration(hintText: "Enter the URL"),
),
Container(
alignment: Alignment.center,
child: RaisedButton(
onPressed: () async {
await _controller.pause();
MEDIA_URL = _textEditingController.text;
_controller = VideoPlayerController.network(MEDIA_URL);
await _controller.initialize();
setState(() {});
await _controller.play();
},
child: Text("load"),
),
),
],
);
}
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Video Demo',
home: SafeArea(
child: Scaffold(
body: Column(
children: [
Center(
child: _controller.value.initialized
? AspectRatio(
aspectRatio: _controller.value.aspectRatio,
child: VideoPlayer(_controller),
)
: Container(),
),
_buildInput(),
],
),
floatingActionButton: FloatingActionButton(
onPressed: () {
setState(() {
_controller.value.isPlaying
? _controller.pause()
: _controller.play();
});
},
child: Icon(
_controller.value.isPlaying ? Icons.pause : Icons.play_arrow,
),
),
),
),
);
}
@override
void dispose() {
super.dispose();
_controller.dispose();
}
}
关于flutter - 输入带有要从互联网上获取的按钮的textField中视频的URL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63711243/