import 'dart:async'; import 'package:flutter/material.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:fladder/models/items/media_streams_model.dart'; import 'package:fladder/models/playback/playback_model.dart'; import 'package:fladder/wrappers/players/player_states.dart'; const libassFallbackFont = "assets/mp-font.ttf"; abstract class BasePlayer { Stream get stateStream; PlayerState lastState = PlayerState(); Future init(Ref ref); Widget? videoWidget( Key key, BoxFit fit, ); Widget? subtitles( bool showOverlay, ); Future dispose(); Future open(String url, bool play); Future seek(Duration position); Future play(); Future setVolume(double volume); Future setSpeed(double speed); Future pause(); Future stop(); Future playOrPause(); Future loop(bool loop); Future setSubtitleTrack(SubStreamModel? model, PlaybackModel playbackModel); Future setAudioTrack(AudioStreamModel? model, PlaybackModel playbackModel); Uri? isValidUrl(String input) { try { final uri = Uri.tryParse(input); if (uri != null && uri.isAbsolute && (uri.scheme == 'http' || uri.scheme == 'https')) { return uri; } else { return null; } } catch (e) { return null; } } }