import 'dart:convert'; import 'dart:math'; import 'package:chewie/chewie.dart'; import "package:dart_vlc/dart_vlc.dart"; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:openmediacentermobile/preview_tile.dart'; import 'package:video_player/video_player.dart'; import 'api/api.dart'; import 'api/token.dart'; import 'log/log.dart'; import 'platform.dart'; class VideoScreen extends StatefulWidget { const VideoScreen({Key? key, required this.metaData}) : super(key: key); final VideoT metaData; @override State createState() => _VideoScreenState(); } class _VideoScreenState extends State { Player? _player = isDesktop() ? Player(id: Random().nextInt(0x7fffffff)) : null; ChewieController? _chewieController; void loadData() async { final data = await API.query("video", "loadVideo", {'MovieId': widget.metaData.id}); final d = jsonDecode(data); final url = d["MovieUrl"]; final token = await Token.getInstance().getToken(); if (token == null) return; final baseurl = token.domain; // todo not static middle path final path = baseurl + "/videos/vids/" + url; if (isDesktop()) { final media2 = Media.network(path); _player?.open( media2, autoStart: true, // default ); } else { final VideoPlayerController _controller = VideoPlayerController.network(path); await _controller.initialize(); _chewieController = ChewieController( videoPlayerController: _controller, autoPlay: true, looping: true, allowFullScreen: true, allowMuting: true, allowPlaybackSpeedChanging: true, zoomAndPan: true ); setState(() {}); } } @override void initState() { super.initState(); if(isDesktop()){ RawKeyboard.instance.addListener((value) { if (value.logicalKey == LogicalKeyboardKey.arrowRight) { _player?.seek(_player!.position.position! + const Duration(seconds: 5)); } else if (value.logicalKey == LogicalKeyboardKey.arrowLeft) { _player?.seek(_player!.position.position! + const Duration(seconds: -5)); } }); } loadData(); // todo hide appbar after some seonds } @override void dispose() { super.dispose(); if (isDesktop()) { _player?.dispose(); } else { _chewieController?.videoPlayerController.dispose(); _chewieController?.dispose(); } } @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: Text(widget.metaData.title), ), body: Center(child: isDesktop() ? videoDesktop() : videoNotDesktop()), ); } Widget videoDesktop() { return Video( player: _player, scale: 1.0, // default showControls: true ); } Widget videoNotDesktop() { if (_chewieController == null) { return Column( crossAxisAlignment: CrossAxisAlignment.center, mainAxisAlignment: MainAxisAlignment.center, children: const [CircularProgressIndicator(), Text("loading...")], ); } return Chewie( controller: _chewieController!, ); } }