Flutter自定义视频播放插件flick_video_player_custom的使用
Flutter自定义视频播放插件flick_video_player_custom的使用
基于 Flick Video Player
Flick Video Player Custom
Flick Video Player Custom 是一个为 Flutter 设计的视频播放器。
video_player
插件提供了低级别的视频播放访问。Flick Player 在底层封装了 video_player
,并为开发者提供了创建自己的用户界面和功能的基础架构。
特性
- 点击视频时显示覆盖层
- 更改视频播放速度
- 更多自定义菜单选项
- 编辑滑动条界面
- 编辑全屏模式
移动端演示
视频比例 16:9
视频比例 9:16
设置表单
更多UI控制器(视频下方的暗色覆盖)
安装
在你的 Flutter 项目的 pubspec.yaml
文件中添加以下依赖:
dependencies:
flick_video_player_custom: <latest_version>
video_player: <latest_version>
如何使用
创建一个 FlickManager
并将其传递给 FlickVideoPlayer
,确保在使用后释放 FlickManager
。
import 'package:flutter/material.dart';
import 'package:flick_video_player_custom/flick_video_player.dart';
import 'package:video_player/video_player.dart';
class MyHomePage extends StatefulWidget {
const MyHomePage({super.key, required this.title});
final String title;
[@override](/user/override)
State<MyHomePage> createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
late FlickManager flickManager1;
late FlickManager flickManager2;
[@override](/user/override)
void initState() {
super.initState();
flickManager1 = FlickManager(
videoPlayerController: VideoPlayerController.network(
"https://storage.googleapis.com/gtv-videos-bucket/sample/BigBuckBunny.mp4",
),
additionalOptions: [
OptionModel(icon: Icons.hd, onPressFeature: () {}, name: 'Quality')
],
);
flickManager2 = FlickManager(
videoPlayerController: VideoPlayerController.network(
"http://commondatastorage.googleapis.com/gtv-videos-bucket/sample/ForBiggerMeltdowns.mp4",
),
);
}
[@override](/user/override)
void dispose() {
flickManager1.dispose();
flickManager2.dispose();
super.dispose();
}
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text(widget.title),
),
body: Center(
child: SingleChildScrollView(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
FlickVideoPlayer(
flickManager: flickManager1,
),
FlickVideoPlayer(
flickManager: flickManager2,
flickVideoWithControls: const FlickVideoWithControls(
videoFit: BoxFit.fitWidth,
controls: FlickPortraitControls(),
),
flickVideoWithControlsFullscreen: const FlickVideoWithControls(
controls: FlickLandscapeControls(),
),
),
],
),
),
),
);
}
}
示例代码
import 'package:flutter/material.dart';
import 'package:flick_video_player_custom/flick_video_player.dart';
import 'package:video_player/video_player.dart';
import 'change_stream_page.dart';
void main() {
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({super.key});
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
debugShowCheckedModeBanner: false,
title: 'Flutter Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: const MyHomePage(title: 'Flick video player custom'),
);
}
}
class MyHomePage extends StatefulWidget {
const MyHomePage({super.key, required this.title});
final String title;
[@override](/user/override)
State<MyHomePage> createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
late FlickManager flickManager1;
late FlickManager flickManager2;
[@override](/user/override)
void initState() {
super.initState();
flickManager1 = FlickManager(
videoPlayerController: VideoPlayerController.network(
"https://storage.googleapis.com/gtv-videos-bucket/sample/BigBuckBunny.mp4",
),
additionalOptions: [
OptionModel(
icon: Icons.hd,
onPressFeature: _onPressQuality,
name: 'Quality',
),
],
);
flickManager2 = FlickManager(
videoPlayerController: VideoPlayerController.network(
"http://commondatastorage.googleapis.com/gtv-videos-bucket/sample/ForBiggerMeltdowns.mp4",
),
);
}
[@override](/user/override)
void dispose() {
flickManager1.dispose();
flickManager2.dispose();
super.dispose();
}
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text(widget.title),
),
body: Center(
child: SingleChildScrollView(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
FlickVideoPlayer(flickManager: flickManager1),
// FlickVideoPlayer(
// flickManager: flickManager2,
// flickVideoWithControls: const FlickVideoWithControls(
// videoFit: BoxFit.fitWidth,
// controls: FlickPortraitControls(),
// ),
// flickVideoWithControlsFullscreen: const FlickVideoWithControls(
// controls: FlickLandscapeControls(),
// ),
// ),
],
),
),
),
);
}
void _onPressQuality() async {
Navigator.pop(context);
Duration currentPosition = await flickManager1
.flickVideoManager?.videoPlayerController?.position ??
const Duration(milliseconds: 0);
VideoPlayerController videoPlayerController = VideoPlayerController.network(
"http://commondatastorage.googleapis.com/gtv-videos-bucket/sample/ElephantsDream.mp4",
);
flickManager1.handleChangeVideo(
videoPlayerController,
videoChangeDuration: currentPosition,
isKeepValueVideo: true,
);
flickManager1.flickControlManager?.togglePlay();
}
}
更多关于Flutter自定义视频播放插件flick_video_player_custom的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter自定义视频播放插件flick_video_player_custom的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
flick_video_player_custom
是一个基于 video_player
和 flick
的 Flutter 插件,用于在 Flutter 应用中实现自定义视频播放器。它提供了更多的自定义选项和功能,比如播放控制、全屏模式、字幕支持等。
安装
首先,你需要在 pubspec.yaml
文件中添加 flick_video_player_custom
依赖:
dependencies:
flutter:
sdk: flutter
flick_video_player_custom: ^0.3.0 # 使用最新版本
然后运行 flutter pub get
来安装依赖。
基本使用
-
导入包:
在你的 Dart 文件中导入
flick_video_player_custom
:import 'package:flick_video_player_custom/flick_video_player_custom.dart';
-
创建 FlickManager:
FlickManager
是flick_video_player_custom
的核心类,它管理视频播放器的状态和控制器。FlickManager flickManager = FlickManager( videoPlayerController: VideoPlayerController.network( 'https://www.sample-videos.com/video123/mp4/720/big_buck_bunny_720p_1mb.mp4', ), );
-
使用 FlickVideoPlayer:
在你的 UI 中使用
FlickVideoPlayer
组件来显示视频播放器:class VideoPlayerScreen extends StatelessWidget { final FlickManager flickManager; VideoPlayerScreen({required this.flickManager}); [@override](/user/override) Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: Text('Custom Video Player'), ), body: Center( child: FlickVideoPlayer( flickManager: flickManager, ), ), ); } }
-
释放资源:
在页面销毁时,记得释放
FlickManager
的资源,以避免内存泄漏:[@override](/user/override) void dispose() { flickManager.dispose(); super.dispose(); }
自定义播放器
flick_video_player_custom
提供了丰富的自定义选项,你可以通过传递不同的参数来定制播放器的外观和行为。
-
自定义控制条:
你可以通过
flickManager
来控制播放器的行为,比如播放、暂停、快进、快退等。FlickVideoPlayer( flickManager: flickManager, flickVideoWithControls: FlickVideoWithControls( controls: CustomControls(), ), );
其中
CustomControls
是你自定义的控制条组件。 -
全屏模式:
flick_video_player_custom
支持全屏模式,你可以通过flickManager
进入或退出全屏。flickManager.flickControlManager?.enterFullscreen(); flickManager.flickControlManager?.exitFullscreen();
-
字幕支持:
你可以通过
flickManager
来加载和显示字幕。flickManager.flickControlManager?.setSubtitles([ Subtitle( start: Duration(seconds: 0), end: Duration(seconds: 5), text: 'Hello, World!', ), ]);
示例代码
以下是一个完整的示例代码:
import 'package:flutter/material.dart';
import 'package:flick_video_player_custom/flick_video_player_custom.dart';
import 'package:video_player/video_player.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
home: VideoPlayerScreen(),
);
}
}
class VideoPlayerScreen extends StatefulWidget {
[@override](/user/override)
_VideoPlayerScreenState createState() => _VideoPlayerScreenState();
}
class _VideoPlayerScreenState extends State<VideoPlayerScreen> {
late FlickManager flickManager;
[@override](/user/override)
void initState() {
super.initState();
flickManager = FlickManager(
videoPlayerController: VideoPlayerController.network(
'https://www.sample-videos.com/video123/mp4/720/big_buck_bunny_720p_1mb.mp4',
),
);
}
[@override](/user/override)
void dispose() {
flickManager.dispose();
super.dispose();
}
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Custom Video Player'),
),
body: Center(
child: FlickVideoPlayer(
flickManager: flickManager,
),
),
);
}
}