import 'package:aves/model/entry.dart'; import 'package:flutter/material.dart'; abstract class AvesVideoController { AvesVideoController(); void dispose(); Future setDataSource(String uri); Future refreshVideoInfo(); Future play(); Future pause(); Future seekTo(int targetMillis); Future seekToProgress(double progress); Listenable get playCompletedListenable; VideoStatus get status; Stream get statusStream; bool get isPlayable; bool get isPlaying => status == VideoStatus.playing; bool get isVideoReady; Stream get isVideoReadyStream; int get duration; int get currentPosition; double get progress => (currentPosition ?? 0).toDouble() / (duration ?? 1); Stream get positionStream; Widget buildPlayerWidget(BuildContext context, AvesEntry entry); } class AvesVideoInfo { // in millis int duration, currentPosition; AvesVideoInfo({ this.duration, this.currentPosition, }); } enum VideoStatus { idle, initialized, preparing, prepared, playing, paused, completed, stopped, disposed, error, }