[video_player] Switch platform interface to new analysis options (#4785)
diff --git a/packages/video_player/video_player_platform_interface/CHANGELOG.md b/packages/video_player/video_player_platform_interface/CHANGELOG.md index 8d295aa..353f273 100644 --- a/packages/video_player/video_player_platform_interface/CHANGELOG.md +++ b/packages/video_player/video_player_platform_interface/CHANGELOG.md
@@ -1,6 +1,7 @@ -## NEXT +## 5.0.2 * Adds the Pigeon definitions used to create the method channel implementation. +* Internal code cleanup for stricter analysis options. ## 5.0.1
diff --git a/packages/video_player/video_player_platform_interface/analysis_options.yaml b/packages/video_player/video_player_platform_interface/analysis_options.yaml deleted file mode 100644 index 5aeb4e7..0000000 --- a/packages/video_player/video_player_platform_interface/analysis_options.yaml +++ /dev/null
@@ -1 +0,0 @@ -include: ../../../analysis_options_legacy.yaml
diff --git a/packages/video_player/video_player_platform_interface/lib/messages.dart b/packages/video_player/video_player_platform_interface/lib/messages.dart index 0ddbfae..831f4e3 100644 --- a/packages/video_player/video_player_platform_interface/lib/messages.dart +++ b/packages/video_player/video_player_platform_interface/lib/messages.dart
@@ -4,7 +4,7 @@ // Autogenerated from Pigeon (v0.1.21), 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 +// ignore_for_file: public_member_api_docs, non_constant_identifier_names, avoid_as, unused_import, cast_nullable_to_non_nullable // @dart = 2.12 import 'dart:async'; import 'dart:typed_data' show Uint8List, Int32List, Int64List, Float64List;
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 31d1839..2aa7fb3 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
@@ -17,7 +17,7 @@ /// third-party implementations. It is not used by other implementations in /// this repository. class MethodChannelVideoPlayer extends VideoPlayerPlatform { - VideoPlayerApi _api = VideoPlayerApi(); + final VideoPlayerApi _api = VideoPlayerApi(); @override Future<void> init() { @@ -31,7 +31,7 @@ @override Future<int?> create(DataSource dataSource) async { - CreateMessage message = CreateMessage(); + final CreateMessage message = CreateMessage(); switch (dataSource.sourceType) { case DataSourceType.asset: @@ -51,7 +51,7 @@ break; } - TextureMessage response = await _api.create(message); + final TextureMessage response = await _api.create(message); return response.textureId; } @@ -97,7 +97,7 @@ @override Future<Duration> getPosition(int textureId) async { - PositionMessage response = + final PositionMessage response = await _api.position(TextureMessage()..textureId = textureId); return Duration(milliseconds: response.position!); } @@ -107,21 +107,21 @@ return _eventChannelFor(textureId) .receiveBroadcastStream() .map((dynamic event) { - final Map<dynamic, dynamic> map = event; + final Map<dynamic, dynamic> map = event as Map<dynamic, dynamic>; switch (map['event']) { case 'initialized': return VideoEvent( eventType: VideoEventType.initialized, - duration: Duration(milliseconds: map['duration']), - size: Size(map['width']?.toDouble() ?? 0.0, - map['height']?.toDouble() ?? 0.0), + duration: Duration(milliseconds: map['duration']! as int), + size: Size((map['width'] as num?)?.toDouble() ?? 0.0, + (map['height'] as num?)?.toDouble() ?? 0.0), ); case 'completed': return VideoEvent( eventType: VideoEventType.completed, ); case 'bufferingUpdate': - final List<dynamic> values = map['values']; + final List<dynamic> values = map['values']! as List<dynamic>; return VideoEvent( buffered: values.map<DurationRange>(_toDurationRange).toList(), @@ -162,10 +162,10 @@ }; DurationRange _toDurationRange(dynamic value) { - final List<dynamic> pair = value; + final List<dynamic> pair = value as List<dynamic>; return DurationRange( - Duration(milliseconds: pair[0]), - Duration(milliseconds: pair[1]), + Duration(milliseconds: pair[0]! as int), + Duration(milliseconds: pair[1]! as int), ); } }
diff --git a/packages/video_player/video_player_platform_interface/lib/video_player_platform_interface.dart b/packages/video_player/video_player_platform_interface/lib/video_player_platform_interface.dart index 451537a..f10fe66 100644 --- a/packages/video_player/video_player_platform_interface/lib/video_player_platform_interface.dart +++ b/packages/video_player/video_player_platform_interface/lib/video_player_platform_interface.dart
@@ -127,7 +127,7 @@ this.formatHint, this.asset, this.package, - this.httpHeaders = const {}, + this.httpHeaders = const <String, String>{}, }); /// The way in which the video was originally loaded. @@ -193,6 +193,7 @@ } /// Event emitted from the platform implementation. +@immutable class VideoEvent { /// Creates an instance of [VideoEvent]. /// @@ -200,6 +201,10 @@ /// /// Depending on the [eventType], the [duration], [size] and [buffered] /// arguments can be null. + // TODO(stuartmorgan): Temporarily suppress warnings about not using const + // in all of the other video player packages, fix this, and then update + // the other packages to use const. + // ignore: prefer_const_constructors_in_immutables VideoEvent({ required this.eventType, this.duration, @@ -270,9 +275,14 @@ /// Describes a discrete segment of time within a video using a [start] and /// [end] [Duration]. +@immutable class DurationRange { /// Trusts that the given [start] and [end] are actually in order. They should /// both be non-null. + // TODO(stuartmorgan): Temporarily suppress warnings about not using const + // in all of the other video player packages, fix this, and then update + // the other packages to use const. + // ignore: prefer_const_constructors_in_immutables DurationRange(this.start, this.end); /// The beginning of the segment described relative to the beginning of the @@ -313,7 +323,8 @@ } @override - String toString() => '$runtimeType(start: $start, end: $end)'; + String toString() => + '${objectRuntimeType(this, 'DurationRange')}(start: $start, end: $end)'; @override bool operator ==(Object other) => @@ -328,14 +339,19 @@ } /// [VideoPlayerOptions] can be optionally used to set additional player settings +@immutable class VideoPlayerOptions { + /// set additional optional player settings + // TODO(stuartmorgan): Temporarily suppress warnings about not using const + // in all of the other video player packages, fix this, and then update + // the other packages to use const. + // ignore: prefer_const_constructors_in_immutables + VideoPlayerOptions({this.mixWithOthers = false}); + /// Set this to true to mix the video players audio with other audio sources. /// The default value is false /// /// Note: This option will be silently ignored in the web platform (there is /// currently no way to implement this feature in this platform). final bool mixWithOthers; - - /// set additional optional player settings - VideoPlayerOptions({this.mixWithOthers = false}); }
diff --git a/packages/video_player/video_player_platform_interface/pubspec.yaml b/packages/video_player/video_player_platform_interface/pubspec.yaml index b7d5745..7d5bd83 100644 --- a/packages/video_player/video_player_platform_interface/pubspec.yaml +++ b/packages/video_player/video_player_platform_interface/pubspec.yaml
@@ -4,7 +4,7 @@ issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+video_player%22 # 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: 5.0.1 +version: 5.0.2 environment: sdk: ">=2.12.0 <3.0.0"
diff --git a/packages/video_player/video_player_platform_interface/test/method_channel_video_player_test.dart b/packages/video_player/video_player_platform_interface/test/method_channel_video_player_test.dart index 4d1c9b7..75baba4 100644 --- a/packages/video_player/video_player_platform_interface/test/method_channel_video_player_test.dart +++ b/packages/video_player/video_player_platform_interface/test/method_channel_video_player_test.dart
@@ -13,7 +13,7 @@ import 'test.dart'; class _ApiLogger implements TestHostVideoPlayerApi { - final List<String> log = []; + final List<String> log = <String>[]; TextureMessage? textureMessage; CreateMessage? createMessage; PositionMessage? positionMessage; @@ -148,7 +148,7 @@ expect(log.createMessage?.uri, 'someUri'); expect(log.createMessage?.packageName, null); expect(log.createMessage?.formatHint, 'dash'); - expect(log.createMessage?.httpHeaders, {}); + expect(log.createMessage?.httpHeaders, <Object?, Object?>{}); expect(textureId, 3); }); @@ -156,14 +156,15 @@ final int? textureId = await player.create(DataSource( sourceType: DataSourceType.network, uri: 'someUri', - httpHeaders: {'Authorization': 'Bearer token'}, + httpHeaders: <String, String>{'Authorization': 'Bearer token'}, )); expect(log.log.last, 'create'); expect(log.createMessage?.asset, null); expect(log.createMessage?.uri, 'someUri'); expect(log.createMessage?.packageName, null); expect(log.createMessage?.formatHint, null); - expect(log.createMessage?.httpHeaders, {'Authorization': 'Bearer token'}); + expect(log.createMessage?.httpHeaders, + <String, String>{'Authorization': 'Bearer token'}); expect(textureId, 3); }); @@ -238,7 +239,7 @@ _ambiguate(ServicesBinding.instance) ?.defaultBinaryMessenger .setMockMessageHandler( - "flutter.io/videoPlayer/videoEvents123", + 'flutter.io/videoPlayer/videoEvents123', (ByteData? message) async { final MethodCall methodCall = const StandardMethodCodec().decodeMethodCall(message); @@ -246,7 +247,7 @@ await _ambiguate(ServicesBinding.instance) ?.defaultBinaryMessenger .handlePlatformMessage( - "flutter.io/videoPlayer/videoEvents123", + 'flutter.io/videoPlayer/videoEvents123', const StandardMethodCodec() .encodeSuccessEnvelope(<String, dynamic>{ 'event': 'initialized', @@ -259,7 +260,7 @@ await _ambiguate(ServicesBinding.instance) ?.defaultBinaryMessenger .handlePlatformMessage( - "flutter.io/videoPlayer/videoEvents123", + 'flutter.io/videoPlayer/videoEvents123', const StandardMethodCodec() .encodeSuccessEnvelope(<String, dynamic>{ 'event': 'completed', @@ -269,7 +270,7 @@ await _ambiguate(ServicesBinding.instance) ?.defaultBinaryMessenger .handlePlatformMessage( - "flutter.io/videoPlayer/videoEvents123", + 'flutter.io/videoPlayer/videoEvents123', const StandardMethodCodec() .encodeSuccessEnvelope(<String, dynamic>{ 'event': 'bufferingUpdate', @@ -283,7 +284,7 @@ await _ambiguate(ServicesBinding.instance) ?.defaultBinaryMessenger .handlePlatformMessage( - "flutter.io/videoPlayer/videoEvents123", + 'flutter.io/videoPlayer/videoEvents123', const StandardMethodCodec() .encodeSuccessEnvelope(<String, dynamic>{ 'event': 'bufferingStart', @@ -293,7 +294,7 @@ await _ambiguate(ServicesBinding.instance) ?.defaultBinaryMessenger .handlePlatformMessage( - "flutter.io/videoPlayer/videoEvents123", + 'flutter.io/videoPlayer/videoEvents123', const StandardMethodCodec() .encodeSuccessEnvelope(<String, dynamic>{ 'event': 'bufferingEnd',
diff --git a/script/configs/custom_analysis.yaml b/script/configs/custom_analysis.yaml index 7ef7969..0dbeae4 100644 --- a/script/configs/custom_analysis.yaml +++ b/script/configs/custom_analysis.yaml
@@ -26,5 +26,4 @@ - in_app_purchase/in_app_purchase_android - in_app_purchase/in_app_purchase_storekit - video_player/video_player -- video_player/video_player_platform_interface - video_player/video_player_web