在Flutter中实现播放器功能,主要有以下两种方式:
1. 使用 video_player 插件(官方推荐)
这是最常用的视频播放解决方案,支持iOS和Android。
基本实现步骤:
- 添加依赖
dependencies:
video_player: ^2.8.2
chewie: ^1.5.0 # 可选,提供更好的UI控件
- 基础播放器实现
import 'package:video_player/video_player.dart';
import 'package:flutter/material.dart';
class VideoPlayerWidget extends StatefulWidget {
@override
_VideoPlayerWidgetState createState() => _VideoPlayerWidgetState();
}
class _VideoPlayerWidgetState extends State<VideoPlayerWidget> {
late VideoPlayerController _controller;
@override
void initState() {
super.initState();
// 网络视频
_controller = VideoPlayerController.network(
'https://example.com/video.mp4',
);
// 本地视频
// _controller = VideoPlayerController.asset('assets/video.mp4');
_controller.initialize().then((_) {
setState(() {});
});
}
@override
Widget build(BuildContext context) {
return Scaffold(
body: Center(
child: _controller.value.isInitialized
? AspectRatio(
aspectRatio: _controller.value.aspectRatio,
child: VideoPlayer(_controller),
)
: CircularProgressIndicator(),
),
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();
}
}
2. 使用 chewie 提供更好的UI
import 'package:chewie/chewie.dart';
class ChewieVideoPlayer extends StatefulWidget {
@override
_ChewieVideoPlayerState createState() => _ChewieVideoPlayerState();
}
class _ChewieVideoPlayerState extends State<ChewieVideoPlayer> {
late VideoPlayerController _videoPlayerController;
late ChewieController _chewieController;
@override
void initState() {
super.initState();
_videoPlayerController = VideoPlayerController.network(
'https://example.com/video.mp4',
);
_chewieController = ChewieController(
videoPlayerController: _videoPlayerController,
autoPlay: true,
looping: true,
aspectRatio: 16 / 9,
);
}
@override
Widget build(BuildContext context) {
return Chewie(controller: _chewieController);
}
@override
void dispose() {
_videoPlayerController.dispose();
_chewieController.dispose();
super.dispose();
}
}
主要功能特性
- 播放控制:播放、暂停、进度控制
- 全屏支持:横竖屏切换
- 手势操作:双击播放/暂停,滑动调节音量/亮度
- 自定义UI:可完全自定义播放器界面
其他播放器选项
- flick_video_player:功能丰富的播放器
- better_player:基于video_player的增强版本
- just_audio:专注于音频播放
选择哪种方案取决于你的具体需求,对于大多数视频播放场景,video_player + chewie的组合已经足够满足需求。