Flutter:视频预览功能
pubspec.yaml
media_kit: ^1.2.1 # Primary package.media_kit_video: ^1.3.1 # For video rendering.media_kit_libs_video: ^1.0.7 # Native video dependencies.
main.dart 初始化
Future<void> main() async {runZonedGuarded(() async {WidgetsFlutterBinding.ensureInitialized();// Necessary initialization for package:media_kit.MediaKit.ensureInitialized();// 添加错误捕获FlutterError.onError = (FlutterErrorDetails details) {};await Global.init();runApp(const MyApp());}, (error, stackTrace) {});
}
使用方式
onTap(() {// 这里需要播放视频Get.to(() => VideoPreview(singleVideo: item.url ?? ''));
})
封装播放器
import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:media_kit/media_kit.dart';
import 'package:media_kit_video/media_kit_video.dart';/*视频预览组件使用方式:单个视频预览onTap(() {Get.to(() => VideoPreview(singleVideo: '视频url'));})注意:需要在 main() 函数中调用 MediaKit.ensureInitialized()*/class VideoPreview extends StatefulWidget {final String? singleVideo;const VideoPreview({super.key,this.singleVideo,});State<VideoPreview> createState() => _VideoPreviewState();
}class _VideoPreviewState extends State<VideoPreview> {// Create a [Player] to control playback.late final player = Player();// Create a [VideoController] to handle video output from [Player].late final controller = VideoController(player);void initState() {super.initState();// Play a [Media] or [Playlist].if (widget.singleVideo != null && widget.singleVideo!.isNotEmpty) {player.open(Media(widget.singleVideo!));}}void dispose() {player.dispose();super.dispose();}Widget build(BuildContext context) {if (widget.singleVideo == null || widget.singleVideo!.isEmpty) {return const SizedBox();}return Scaffold(backgroundColor: Colors.black,appBar: AppBar(backgroundColor: Colors.black,elevation: 0,leading: IconButton(icon: const Icon(Icons.close,color: Colors.white,size: 24,),onPressed: () => Get.back(),),),body: Center(child: Video(controller: controller,controls: MaterialVideoControls,),),);}
}