import 'dart:async'; import 'package:aves/services/common/services.dart'; import 'package:aves/widgets/viewer/video/controller.dart'; import 'package:flutter/services.dart'; abstract class MediaSessionService { Future update(AvesVideoController controller); Future release(String uri); } class PlatformMediaSessionService implements MediaSessionService { static const _platformObject = MethodChannel('deckers.thibault/aves/media_session'); @override Future update(AvesVideoController controller) async { final entry = controller.entry; try { await _platformObject.invokeMethod('update', { 'uri': entry.uri, 'title': entry.bestTitle, 'durationMillis': controller.duration, 'state': _toPlatformState(controller.status), 'positionMillis': controller.currentPosition, 'playbackSpeed': controller.speed, }); } on PlatformException catch (e, stack) { await reportService.recordError(e, stack); } } @override Future release(String uri) async { try { await _platformObject.invokeMethod('release', { 'uri': uri, }); } on PlatformException catch (e, stack) { await reportService.recordError(e, stack); } } String _toPlatformState(VideoStatus status) { switch (status) { case VideoStatus.paused: return 'paused'; case VideoStatus.playing: return 'playing'; case VideoStatus.idle: case VideoStatus.initialized: case VideoStatus.completed: case VideoStatus.error: return 'stopped'; } } }