flutter - 输入带有要从互联网上获取的按钮的textField中视频的URL

标签 flutter dart flutter-layout

我是 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();
    }
工作演示
enter image description here
完整的代码
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/

相关文章:

flutter - 如何使用 flutter 页面路由保持状态

android - 在 flutter elevatedbutton 中设置宽度

firebase - 向 firebase 查询添加动态 where 条件

flutter - Flutter:如何制作自定义的动画下拉菜单?

flutter - Flutter推出新的独立屏幕

flutter - 如何根据 Flutter 中具有动态大小的小部件的大小设置角半径

flutter - 如何使用按钮点击更新页面 View 中的文本数据?

flutter - 错误使用 ParentDataWidget。 - 我该如何解决?

optimization - Dart 2 中的最佳渲染循环是什么?

Flutter SharedPreferences 值在应用程序启动时提供给 Provider