import 'dart:io'; import 'package:flutter/material.dart'; import 'package:media_kit/media_kit.dart'; import 'package:media_kit_video/media_kit_video.dart'; /// Uygulama içi video oynatıcı dialogu (media_kit). Future showVideoOynatici(BuildContext context, String yol, {String baslik = ''}) async { if (!File(yol).existsSync()) return; await showDialog( context: context, builder: (ctx) => Dialog( backgroundColor: Colors.black, insetPadding: const EdgeInsets.all(28), child: _OynaticiGovde(yol: yol, baslik: baslik), ), ); } class _OynaticiGovde extends StatefulWidget { const _OynaticiGovde({required this.yol, required this.baslik}); final String yol; final String baslik; @override State<_OynaticiGovde> createState() => _OynaticiGovdeState(); } class _OynaticiGovdeState extends State<_OynaticiGovde> { late final Player _player = Player(); late final VideoController _controller = VideoController(_player); @override void initState() { super.initState(); _player.open(Media(Uri.file(widget.yol).toString())); } @override void dispose() { _player.dispose(); super.dispose(); } @override Widget build(BuildContext context) { return Column( mainAxisSize: MainAxisSize.min, children: [ Padding( padding: const EdgeInsets.fromLTRB(12, 8, 4, 4), child: Row(children: [ Expanded( child: Text(widget.baslik, maxLines: 1, overflow: TextOverflow.ellipsis, style: const TextStyle( color: Colors.white, fontSize: 13, fontWeight: FontWeight.w700)), ), IconButton( icon: const Icon(Icons.close, color: Colors.white, size: 18), onPressed: () => Navigator.pop(context), ), ]), ), ConstrainedBox( constraints: const BoxConstraints(maxWidth: 960, maxHeight: 560), child: AspectRatio( aspectRatio: 16 / 9, child: Video(controller: _controller, controls: AdaptiveVideoControls), ), ), ], ); } }