Flutter视频播放插件vk_video的使用

发布于 1周前 作者 itying888 来自 Flutter

Flutter视频播放插件vk_video的使用

插件介绍

vk_video插件简化了将VK视频播放集成到您的Flutter应用程序中。它支持VK Video API,允许轻松嵌入和控制视频,为用户提供无缝的媒体体验。

vk_video

Pub apk License: MIT Points Donate Inappwebview


开始使用

添加依赖

pubspec.yaml文件中添加以下依赖:

dependencies:
  vk_video: ^1.0.3

或者运行命令:

flutter pub add vk_video

使用播放器

导入包

import 'package:vk_video/vk_video.dart';

禁用全屏模式

VKVideo(
    videoOId: '-22822305',
    videoId: '456241864',
),

启用全屏模式

VKVideo(
    videoOId: '-213200306',
    videoId: '456239020',
    isIframeAllowFullscreen: true,
    isAllowsInlineMediaPlayback: false,
),

Android权限配置

为了确保Android应用能够访问互联网,请在AndroidManifest.xml文件中添加以下权限:

<uses-permission android:name="android.permission.INTERNET"/>

使用控制器

初始化控制器

VKVideoController? _controller;

@override
void initState() {
    _controller = VKVideoController();
    super.initState();
}

使用控制器

VKVideo(
    controller: _controller,
    videoOId: '-213200306',
    videoId: '456239020',
    isAutoPlay: true,
    videoResolutionEnum: VideoResolutionEnum.p480,
    videoStartTime: Duration(seconds: 3),
    backgroundColor: const Color(0xFF000000),
    initialWidget: Text(
        "Loading....",
        style: TextStyle(
          color: Color(0xFFFFFFFF),
        ),
    ),
),

添加监听器

_controller?.addListener(() {
    debugPrint("position: ${_controller!.getCurrentTime}");
    debugPrint("currentTime: $currentTime");
    debugPrint("isMute: $isMute");
    debugPrint("duration: ${_controller?.getDuration}");
    debugPrint("volume: ${_controller?.getVolume}");
    debugPrint("quality: ${_controller?.getQuality}");
    debugPrint("player state: ${_controller?.getPlayerState}");
});

求进度条前进5秒

_controller?.onSeekTo(Duration(seconds: _controller!.getCurrentTime!) + Duration(seconds: 5));

示例代码

以下是完整的示例代码,展示了如何在Flutter项目中使用vk_video插件:

import 'package:flutter/material.dart';
import 'package:vk_video/vk_video.dart';

void main() {
  runApp(const MyApp());
}

class MyApp extends StatelessWidget {
  const MyApp({super.key});

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      theme: ThemeData(
        colorScheme: ColorScheme.fromSeed(seedColor: Colors.blue),
        useMaterial3: true,
      ),
      home: const MyHomePage(title: 'vk_video Demo'),
    );
  }
}

class MyHomePage extends StatefulWidget {
  const MyHomePage({super.key, required this.title});

  final String title;

  @override
  State<MyHomePage> createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  VKVideoController? _controller;

  int currentTime = 0;
  bool isMute = false;

  @override
  void initState() {
    _controller = VKVideoController();
    super.initState();
    _controller?.addListener(_videoListener);
  }

  _videoListener() async {
    debugPrint("position: ${_controller!.getCurrentTime}");
    debugPrint("currentTime: $currentTime");
    debugPrint("isMute: $isMute");
    debugPrint("duration: ${_controller?.getDuration}");
    debugPrint("volume: ${_controller?.getVolume}");
    debugPrint("quality: ${_controller?.getQuality}");
    debugPrint("player state: ${_controller?.getPlayerState}");
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: SafeArea(
        child: ListView(
          children: <Widget>[
            VKVideo(
              controller: _controller,
              videoOId: '-213200306',
              videoId: '456239020',
              isAutoPlay: true,
              videoResolutionEnum: VideoResolutionEnum.p480,
              videoStartTime: Duration(seconds: 3),
              backgroundColor: const Color(0xFF000000),
              initialWidget: Text(
                "Loading....",
                style: TextStyle(
                  color: Color(0xFFFFFFFF),
                ),
              ),
            ),
            SizedBox(
              height: 50,
              child: Row(
                mainAxisAlignment: MainAxisAlignment.center,
                children: [
                  TextButton(
                    onPressed: () {
                      _controller?.onPlay();
                    },
                    child: Icon(Icons.play_arrow, size: 35),
                  ),
                  TextButton(
                    onPressed: () {
                      _controller?.onPause();
                    },
                    child: Icon(Icons.pause_outlined, size: 35),
                  ),
                  TextButton(
                    onPressed: () {
                      _controller?.onSeekTo(
                          Duration(seconds: _controller!.getCurrentTime!) -
                              Duration(seconds: 5));
                    },
                    child: Icon(Icons.skip_previous, size: 35),
                  ),
                  TextButton(
                    onPressed: () {
                      _controller?.onSeekTo(
                          Duration(seconds: _controller!.getCurrentTime!) +
                              Duration(seconds: 5));
                    },
                    child: Icon(Icons.skip_next, size: 35),
                  ),
                  TextButton(
                    onPressed: () {
                      _controller?.onUnMute();
                    },
                    child: Icon(Icons.volume_up, size: 35),
                  ),
                  TextButton(
                    onPressed: () {
                      _controller?.onMute();
                    },
                    child: Icon(Icons.volume_off, size: 35),
                  ),
                ],
              ),
            ),
          ],
        ),
      ),
    );
  }
}

希望这个详细的指南能帮助您更好地理解和使用vk_video插件!如果您有任何问题或需要进一步的帮助,请随时联系我。


更多关于Flutter视频播放插件vk_video的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter视频播放插件vk_video的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,关于Flutter视频播放插件vk_video的使用,以下是一个简单的代码示例,展示如何在Flutter应用中集成和使用该插件进行视频播放。

首先,确保你已经在pubspec.yaml文件中添加了vk_video依赖:

dependencies:
  flutter:
    sdk: flutter
  vk_video: ^最新版本号  # 请替换为实际可用的最新版本号

然后,运行flutter pub get命令来获取依赖。

接下来,在你的Flutter应用中,你可以按照以下步骤使用vk_video插件:

  1. 导入插件

在你的Dart文件中导入vk_video插件:

import 'package:vk_video/vk_video.dart';
  1. 定义视频播放器控件

创建一个视频播放器控件并配置其属性。这里是一个简单的例子:

import 'package:flutter/material.dart';
import 'package:vk_video/vk_video.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: VideoPlayerScreen(),
    );
  }
}

class VideoPlayerScreen extends StatefulWidget {
  @override
  _VideoPlayerScreenState createState() => _VideoPlayerScreenState();
}

class _VideoPlayerScreenState extends State<VideoPlayerScreen> {
  VkVideoController? _controller;

  @override
  void initState() {
    super.initState();
    // 初始化视频控制器
    _controller = VkVideoController(
      videoPlayerController: VideoPlayerController.network(
        'https://www.example.com/path/to/your/video.mp4', // 替换为你的视频URL
      ),
      aspectRatio: 16 / 9,
      autoPlay: false,
      looping: false,
    );
  }

  @override
  void dispose() {
    _controller?.dispose();
    super.dispose();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Video Player Demo'),
      ),
      body: Center(
        child: _controller != null
            ? VkVideoPlayer(
                controller: _controller!,
              )
            : Container(),
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: () {
          setState(() {
            // 根据需要控制播放,例如:
            if (_controller!.value.isPlaying) {
              _controller!.pause();
            } else {
              _controller!.play();
            }
          });
        },
        tooltip: 'Play/Pause',
        child: Icon(
          _controller?.value?.isPlaying ?? false
              ? Icons.pause
              : Icons.play_arrow,
        ),
      ),
    );
  }
}
  1. 运行应用

确保你的开发环境已经正确配置,然后运行Flutter应用。你应该能够看到一个简单的视频播放器界面,点击浮动操作按钮可以播放或暂停视频。

请注意,这个示例假设vk_video插件的API与上述代码兼容。如果插件的API有变化,你可能需要参考插件的官方文档或GitHub仓库来获取最新的使用指南和API参考。

回到顶部