diff --git a/packages/video_player/video_player_platform_interface/CHANGELOG.md b/packages/video_player/video_player_platform_interface/CHANGELOG.md index be1b0e385dd9..da5875233f84 100644 --- a/packages/video_player/video_player_platform_interface/CHANGELOG.md +++ b/packages/video_player/video_player_platform_interface/CHANGELOG.md @@ -1,3 +1,7 @@ +## 2.0.0 + +* Migrated to [pigeon](https://pub.dev/packages/pigeon). + ## 1.0.5 * Make the pedantic dev_dependency explicit. diff --git a/packages/video_player/video_player_platform_interface/lib/messages.dart b/packages/video_player/video_player_platform_interface/lib/messages.dart new file mode 100644 index 000000000000..5c1a30f5260c --- /dev/null +++ b/packages/video_player/video_player_platform_interface/lib/messages.dart @@ -0,0 +1,307 @@ +// Autogenerated from Pigeon (v0.1.0-experimental.10), do not edit directly. +// See also: https://pub.dev/packages/pigeon +// ignore_for_file: public_member_api_docs, non_constant_identifier_names, avoid_as, unused_import +import 'dart:async'; +import 'package:flutter/services.dart'; + +class TextureMessage { + int textureId; + // ignore: unused_element + Map _toMap() { + final Map pigeonMap = {}; + pigeonMap['textureId'] = textureId; + return pigeonMap; + } + + // ignore: unused_element + static TextureMessage _fromMap(Map pigeonMap) { + final TextureMessage result = TextureMessage(); + result.textureId = pigeonMap['textureId']; + return result; + } +} + +class CreateMessage { + String asset; + String uri; + String packageName; + String formatHint; + // ignore: unused_element + Map _toMap() { + final Map pigeonMap = {}; + pigeonMap['asset'] = asset; + pigeonMap['uri'] = uri; + pigeonMap['packageName'] = packageName; + pigeonMap['formatHint'] = formatHint; + return pigeonMap; + } + + // ignore: unused_element + static CreateMessage _fromMap(Map pigeonMap) { + final CreateMessage result = CreateMessage(); + result.asset = pigeonMap['asset']; + result.uri = pigeonMap['uri']; + result.packageName = pigeonMap['packageName']; + result.formatHint = pigeonMap['formatHint']; + return result; + } +} + +class LoopingMessage { + int textureId; + bool isLooping; + // ignore: unused_element + Map _toMap() { + final Map pigeonMap = {}; + pigeonMap['textureId'] = textureId; + pigeonMap['isLooping'] = isLooping; + return pigeonMap; + } + + // ignore: unused_element + static LoopingMessage _fromMap(Map pigeonMap) { + final LoopingMessage result = LoopingMessage(); + result.textureId = pigeonMap['textureId']; + result.isLooping = pigeonMap['isLooping']; + return result; + } +} + +class VolumeMessage { + int textureId; + double volume; + // ignore: unused_element + Map _toMap() { + final Map pigeonMap = {}; + pigeonMap['textureId'] = textureId; + pigeonMap['volume'] = volume; + return pigeonMap; + } + + // ignore: unused_element + static VolumeMessage _fromMap(Map pigeonMap) { + final VolumeMessage result = VolumeMessage(); + result.textureId = pigeonMap['textureId']; + result.volume = pigeonMap['volume']; + return result; + } +} + +class PositionMessage { + int textureId; + int position; + // ignore: unused_element + Map _toMap() { + final Map pigeonMap = {}; + pigeonMap['textureId'] = textureId; + pigeonMap['position'] = position; + return pigeonMap; + } + + // ignore: unused_element + static PositionMessage _fromMap(Map pigeonMap) { + final PositionMessage result = PositionMessage(); + result.textureId = pigeonMap['textureId']; + result.position = pigeonMap['position']; + return result; + } +} + +class VideoPlayerApi { + Future initialize() async { + const BasicMessageChannel channel = BasicMessageChannel( + 'dev.flutter.pigeon.VideoPlayerApi.initialize', StandardMessageCodec()); + + final Map replyMap = await channel.send(null); + if (replyMap == null) { + throw PlatformException( + code: 'channel-error', + message: 'Unable to establish connection on channel.', + details: null); + } else if (replyMap['error'] != null) { + final Map error = replyMap['error']; + throw PlatformException( + code: error['code'], + message: error['message'], + details: error['details']); + } else { + // noop + } + } + + Future create(CreateMessage arg) async { + final Map requestMap = arg._toMap(); + const BasicMessageChannel channel = BasicMessageChannel( + 'dev.flutter.pigeon.VideoPlayerApi.create', StandardMessageCodec()); + + final Map replyMap = await channel.send(requestMap); + if (replyMap == null) { + throw PlatformException( + code: 'channel-error', + message: 'Unable to establish connection on channel.', + details: null); + } else if (replyMap['error'] != null) { + final Map error = replyMap['error']; + throw PlatformException( + code: error['code'], + message: error['message'], + details: error['details']); + } else { + return TextureMessage._fromMap(replyMap['result']); + } + } + + Future dispose(TextureMessage arg) async { + final Map requestMap = arg._toMap(); + const BasicMessageChannel channel = BasicMessageChannel( + 'dev.flutter.pigeon.VideoPlayerApi.dispose', StandardMessageCodec()); + + final Map replyMap = await channel.send(requestMap); + if (replyMap == null) { + throw PlatformException( + code: 'channel-error', + message: 'Unable to establish connection on channel.', + details: null); + } else if (replyMap['error'] != null) { + final Map error = replyMap['error']; + throw PlatformException( + code: error['code'], + message: error['message'], + details: error['details']); + } else { + // noop + } + } + + Future setLooping(LoopingMessage arg) async { + final Map requestMap = arg._toMap(); + const BasicMessageChannel channel = BasicMessageChannel( + 'dev.flutter.pigeon.VideoPlayerApi.setLooping', StandardMessageCodec()); + + final Map replyMap = await channel.send(requestMap); + if (replyMap == null) { + throw PlatformException( + code: 'channel-error', + message: 'Unable to establish connection on channel.', + details: null); + } else if (replyMap['error'] != null) { + final Map error = replyMap['error']; + throw PlatformException( + code: error['code'], + message: error['message'], + details: error['details']); + } else { + // noop + } + } + + Future setVolume(VolumeMessage arg) async { + final Map requestMap = arg._toMap(); + const BasicMessageChannel channel = BasicMessageChannel( + 'dev.flutter.pigeon.VideoPlayerApi.setVolume', StandardMessageCodec()); + + final Map replyMap = await channel.send(requestMap); + if (replyMap == null) { + throw PlatformException( + code: 'channel-error', + message: 'Unable to establish connection on channel.', + details: null); + } else if (replyMap['error'] != null) { + final Map error = replyMap['error']; + throw PlatformException( + code: error['code'], + message: error['message'], + details: error['details']); + } else { + // noop + } + } + + Future play(TextureMessage arg) async { + final Map requestMap = arg._toMap(); + const BasicMessageChannel channel = BasicMessageChannel( + 'dev.flutter.pigeon.VideoPlayerApi.play', StandardMessageCodec()); + + final Map replyMap = await channel.send(requestMap); + if (replyMap == null) { + throw PlatformException( + code: 'channel-error', + message: 'Unable to establish connection on channel.', + details: null); + } else if (replyMap['error'] != null) { + final Map error = replyMap['error']; + throw PlatformException( + code: error['code'], + message: error['message'], + details: error['details']); + } else { + // noop + } + } + + Future position(TextureMessage arg) async { + final Map requestMap = arg._toMap(); + const BasicMessageChannel channel = BasicMessageChannel( + 'dev.flutter.pigeon.VideoPlayerApi.position', StandardMessageCodec()); + + final Map replyMap = await channel.send(requestMap); + if (replyMap == null) { + throw PlatformException( + code: 'channel-error', + message: 'Unable to establish connection on channel.', + details: null); + } else if (replyMap['error'] != null) { + final Map error = replyMap['error']; + throw PlatformException( + code: error['code'], + message: error['message'], + details: error['details']); + } else { + return PositionMessage._fromMap(replyMap['result']); + } + } + + Future seekTo(PositionMessage arg) async { + final Map requestMap = arg._toMap(); + const BasicMessageChannel channel = BasicMessageChannel( + 'dev.flutter.pigeon.VideoPlayerApi.seekTo', StandardMessageCodec()); + + final Map replyMap = await channel.send(requestMap); + if (replyMap == null) { + throw PlatformException( + code: 'channel-error', + message: 'Unable to establish connection on channel.', + details: null); + } else if (replyMap['error'] != null) { + final Map error = replyMap['error']; + throw PlatformException( + code: error['code'], + message: error['message'], + details: error['details']); + } else { + // noop + } + } + + Future pause(TextureMessage arg) async { + final Map requestMap = arg._toMap(); + const BasicMessageChannel channel = BasicMessageChannel( + 'dev.flutter.pigeon.VideoPlayerApi.pause', StandardMessageCodec()); + + final Map replyMap = await channel.send(requestMap); + if (replyMap == null) { + throw PlatformException( + code: 'channel-error', + message: 'Unable to establish connection on channel.', + details: null); + } else if (replyMap['error'] != null) { + final Map error = replyMap['error']; + throw PlatformException( + code: error['code'], + message: error['message'], + details: error['details']); + } else { + // noop + } + } +} diff --git a/packages/video_player/video_player_platform_interface/lib/method_channel_video_player.dart b/packages/video_player/video_player_platform_interface/lib/method_channel_video_player.dart index eb227ce18ec5..4b28100e1642 100644 --- a/packages/video_player/video_player_platform_interface/lib/method_channel_video_player.dart +++ b/packages/video_player/video_player_platform_interface/lib/method_channel_video_player.dart @@ -8,112 +8,81 @@ import 'dart:ui'; import 'package:flutter/services.dart'; import 'package:flutter/widgets.dart'; +import 'messages.dart'; import 'video_player_platform_interface.dart'; -const MethodChannel _channel = MethodChannel('flutter.io/videoPlayer'); - /// An implementation of [VideoPlayerPlatform] that uses method channels. class MethodChannelVideoPlayer extends VideoPlayerPlatform { + VideoPlayerApi _api = VideoPlayerApi(); + @override Future init() { - return _channel.invokeMethod('init'); + return _api.initialize(); } @override Future dispose(int textureId) { - return _channel.invokeMethod( - 'dispose', - {'textureId': textureId}, - ); + return _api.dispose(TextureMessage()..textureId = textureId); } @override Future create(DataSource dataSource) async { - Map dataSourceDescription; + CreateMessage message = CreateMessage(); switch (dataSource.sourceType) { case DataSourceType.asset: - dataSourceDescription = { - 'asset': dataSource.asset, - 'package': dataSource.package, - }; + message.asset = dataSource.asset; + message.packageName = dataSource.package; break; case DataSourceType.network: - dataSourceDescription = { - 'uri': dataSource.uri, - 'formatHint': _videoFormatStringMap[dataSource.formatHint] - }; + message.uri = dataSource.uri; + message.formatHint = _videoFormatStringMap[dataSource.formatHint]; break; case DataSourceType.file: - dataSourceDescription = {'uri': dataSource.uri}; + message.uri = dataSource.uri; break; } - final Map response = - await _channel.invokeMapMethod( - 'create', - dataSourceDescription, - ); - return response['textureId']; + TextureMessage response = await _api.create(message); + return response.textureId; } @override Future setLooping(int textureId, bool looping) { - return _channel.invokeMethod( - 'setLooping', - { - 'textureId': textureId, - 'looping': looping, - }, - ); + return _api.setLooping(LoopingMessage() + ..textureId = textureId + ..isLooping = looping); } @override Future play(int textureId) { - return _channel.invokeMethod( - 'play', - {'textureId': textureId}, - ); + return _api.play(TextureMessage()..textureId = textureId); } @override Future pause(int textureId) { - return _channel.invokeMethod( - 'pause', - {'textureId': textureId}, - ); + return _api.pause(TextureMessage()..textureId = textureId); } @override Future setVolume(int textureId, double volume) { - return _channel.invokeMethod( - 'setVolume', - { - 'textureId': textureId, - 'volume': volume, - }, - ); + return _api.setVolume(VolumeMessage() + ..textureId = textureId + ..volume = volume); } @override Future seekTo(int textureId, Duration position) { - return _channel.invokeMethod( - 'seekTo', - { - 'textureId': textureId, - 'location': position.inMilliseconds, - }, - ); + return _api.seekTo(PositionMessage() + ..textureId = textureId + ..position = position.inMilliseconds); } @override Future getPosition(int textureId) async { - return Duration( - milliseconds: await _channel.invokeMethod( - 'position', - {'textureId': textureId}, - ), - ); + PositionMessage response = + await _api.position(TextureMessage()..textureId = textureId); + return Duration(milliseconds: response.position); } @override diff --git a/packages/video_player/video_player_platform_interface/pubspec.yaml b/packages/video_player/video_player_platform_interface/pubspec.yaml index 2ce3bd17930d..08c336398400 100644 --- a/packages/video_player/video_player_platform_interface/pubspec.yaml +++ b/packages/video_player/video_player_platform_interface/pubspec.yaml @@ -3,7 +3,7 @@ description: A common platform interface for the video_player plugin. homepage: https://github.com/flutter/plugins/tree/master/packages/video_player/video_player_platform_interface # NOTE: We strongly prefer non-breaking changes, even at the expense of a # less-clean API. See https://flutter.dev/go/platform-interface-breaking-changes -version: 1.0.5 +version: 2.0.0 dependencies: flutter: