diff --git a/packages/battery/battery_platform_interface/test/method_channel_battery_test.dart b/packages/battery/battery_platform_interface/test/method_channel_battery_test.dart index 6a312ee73ef2..697582843a95 100644 --- a/packages/battery/battery_platform_interface/test/method_channel_battery_test.dart +++ b/packages/battery/battery_platform_interface/test/method_channel_battery_test.dart @@ -32,13 +32,14 @@ void main() { .setMockMethodCallHandler((MethodCall methodCall) async { switch (methodCall.method) { case 'listen': - await ServicesBinding.instance!.defaultBinaryMessenger + await _ambiguate(ServicesBinding.instance)! + .defaultBinaryMessenger .handlePlatformMessage( - methodChannelBattery.eventChannel.name, - methodChannelBattery.eventChannel.codec - .encodeSuccessEnvelope('full'), - (_) {}, - ); + methodChannelBattery.eventChannel.name, + methodChannelBattery.eventChannel.codec + .encodeSuccessEnvelope('full'), + (_) {}, + ); break; case 'cancel': default: @@ -61,3 +62,10 @@ void main() { }); }); } + +/// This allows a value of type T or T? to be treated as a value of type T?. +/// +/// We use this so that APIs that have become non-nullable can still be used +/// with `!` and `?` on the stable branch. +// TODO(ianh): Remove this once we roll stable in late 2021. +T? _ambiguate(T? value) => value; diff --git a/packages/camera/camera/example/lib/main.dart b/packages/camera/camera/example/lib/main.dart index 536e95de9c8b..16d585db9308 100644 --- a/packages/camera/camera/example/lib/main.dart +++ b/packages/camera/camera/example/lib/main.dart @@ -68,7 +68,7 @@ class _CameraExampleHomeState extends State @override void initState() { super.initState(); - WidgetsBinding.instance?.addObserver(this); + _ambiguate(WidgetsBinding.instance)?.addObserver(this); _flashModeControlRowAnimationController = AnimationController( duration: const Duration(milliseconds: 300), @@ -951,3 +951,10 @@ Future main() async { } runApp(CameraApp()); } + +/// This allows a value of type T or T? to be treated as a value of type T?. +/// +/// We use this so that APIs that have become non-nullable can still be used +/// with `!` and `?` on the stable branch. +// TODO(ianh): Remove this once we roll stable in late 2021. +T? _ambiguate(T? value) => value; diff --git a/packages/connectivity/connectivity_platform_interface/test/method_channel_connectivity_test.dart b/packages/connectivity/connectivity_platform_interface/test/method_channel_connectivity_test.dart index 38f4ac38b156..b69feae252eb 100644 --- a/packages/connectivity/connectivity_platform_interface/test/method_channel_connectivity_test.dart +++ b/packages/connectivity/connectivity_platform_interface/test/method_channel_connectivity_test.dart @@ -42,13 +42,14 @@ void main() { .setMockMethodCallHandler((MethodCall methodCall) async { switch (methodCall.method) { case 'listen': - await ServicesBinding.instance!.defaultBinaryMessenger + await _ambiguate(ServicesBinding.instance)! + .defaultBinaryMessenger .handlePlatformMessage( - methodChannelConnectivity.eventChannel.name, - methodChannelConnectivity.eventChannel.codec - .encodeSuccessEnvelope('wifi'), - (_) {}, - ); + methodChannelConnectivity.eventChannel.name, + methodChannelConnectivity.eventChannel.codec + .encodeSuccessEnvelope('wifi'), + (_) {}, + ); break; case 'cancel': default: @@ -151,3 +152,10 @@ void main() { }); }); } + +/// This allows a value of type T or T? to be treated as a value of type T?. +/// +/// We use this so that APIs that have become non-nullable can still be used +/// with `!` and `?` on the stable branch. +// TODO(ianh): Remove this once we roll stable in late 2021. +T? _ambiguate(T? value) => value; diff --git a/packages/sensors/test/sensors_test.dart b/packages/sensors/test/sensors_test.dart index 659c658c3604..bce3afe6205b 100644 --- a/packages/sensors/test/sensors_test.dart +++ b/packages/sensors/test/sensors_test.dart @@ -52,14 +52,17 @@ void _initializeFakeSensorChannel(String channelName, List sensorData) { const StandardMethodCodec standardMethod = StandardMethodCodec(); void _emitEvent(ByteData? event) { - ServicesBinding.instance!.defaultBinaryMessenger.handlePlatformMessage( - channelName, - event, - (ByteData? reply) {}, - ); + _ambiguate(ServicesBinding.instance)! + .defaultBinaryMessenger + .handlePlatformMessage( + channelName, + event, + (ByteData? reply) {}, + ); } - ServicesBinding.instance!.defaultBinaryMessenger + _ambiguate(ServicesBinding.instance)! + .defaultBinaryMessenger .setMockMessageHandler(channelName, (ByteData? message) async { final MethodCall methodCall = standardMethod.decodeMethodCall(message); if (methodCall.method == 'listen') { @@ -73,3 +76,10 @@ void _initializeFakeSensorChannel(String channelName, List sensorData) { } }); } + +/// This allows a value of type T or T? to be treated as a value of type T?. +/// +/// We use this so that APIs that have become non-nullable can still be used +/// with `!` and `?` on the stable branch. +// TODO(ianh): Remove this once we roll stable in late 2021. +T? _ambiguate(T? value) => value; diff --git a/packages/video_player/video_player/CHANGELOG.md b/packages/video_player/video_player/CHANGELOG.md index 135057b403eb..b082d1b66980 100644 --- a/packages/video_player/video_player/CHANGELOG.md +++ b/packages/video_player/video_player/CHANGELOG.md @@ -1,3 +1,8 @@ +## 2.1.9 + +* Silenced warnings that may occur during build when using a very + recent version of Flutter relating to null safety. + ## 2.1.8 * Refactor `FLTCMTimeToMillis` to support indefinite streams. Fixes [#48670](https://github.com/flutter/flutter/issues/48670). diff --git a/packages/video_player/video_player/lib/video_player.dart b/packages/video_player/video_player/lib/video_player.dart index d5bd7d2f222d..1708d49d678b 100644 --- a/packages/video_player/video_player/lib/video_player.dart +++ b/packages/video_player/video_player/lib/video_player.dart @@ -573,7 +573,7 @@ class _VideoAppLifeCycleObserver extends Object with WidgetsBindingObserver { final VideoPlayerController _controller; void initialize() { - WidgetsBinding.instance!.addObserver(this); + _ambiguate(WidgetsBinding.instance)!.addObserver(this); } @override @@ -593,7 +593,7 @@ class _VideoAppLifeCycleObserver extends Object with WidgetsBindingObserver { } void dispose() { - WidgetsBinding.instance!.removeObserver(this); + _ambiguate(WidgetsBinding.instance)!.removeObserver(this); } } @@ -949,3 +949,10 @@ class ClosedCaption extends StatelessWidget { ); } } + +/// This allows a value of type T or T? to be treated as a value of type T?. +/// +/// We use this so that APIs that have become non-nullable can still be used +/// with `!` and `?` on the stable branch. +// TODO(ianh): Remove this once we roll stable in late 2021. +T? _ambiguate(T? value) => value; diff --git a/packages/video_player/video_player/pubspec.yaml b/packages/video_player/video_player/pubspec.yaml index cf0312916b01..c24377fc1b8b 100644 --- a/packages/video_player/video_player/pubspec.yaml +++ b/packages/video_player/video_player/pubspec.yaml @@ -3,7 +3,7 @@ description: Flutter plugin for displaying inline video with other Flutter widgets on Android, iOS, and web. repository: https://github.com/flutter/plugins/tree/master/packages/video_player/video_player issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+video_player%22 -version: 2.1.8 +version: 2.1.9 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 33a5b34b615d..9da71617e66a 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 @@ -232,13 +232,16 @@ void main() { }); test('videoEventsFor', () async { - ServicesBinding.instance?.defaultBinaryMessenger.setMockMessageHandler( + _ambiguate(ServicesBinding.instance) + ?.defaultBinaryMessenger + .setMockMessageHandler( "flutter.io/videoPlayer/videoEvents123", (ByteData? message) async { final MethodCall methodCall = const StandardMethodCodec().decodeMethodCall(message); if (methodCall.method == 'listen') { - await ServicesBinding.instance?.defaultBinaryMessenger + await _ambiguate(ServicesBinding.instance) + ?.defaultBinaryMessenger .handlePlatformMessage( "flutter.io/videoPlayer/videoEvents123", const StandardMethodCodec() @@ -250,7 +253,8 @@ void main() { }), (ByteData? data) {}); - await ServicesBinding.instance?.defaultBinaryMessenger + await _ambiguate(ServicesBinding.instance) + ?.defaultBinaryMessenger .handlePlatformMessage( "flutter.io/videoPlayer/videoEvents123", const StandardMethodCodec() @@ -259,7 +263,8 @@ void main() { }), (ByteData? data) {}); - await ServicesBinding.instance?.defaultBinaryMessenger + await _ambiguate(ServicesBinding.instance) + ?.defaultBinaryMessenger .handlePlatformMessage( "flutter.io/videoPlayer/videoEvents123", const StandardMethodCodec() @@ -272,7 +277,8 @@ void main() { }), (ByteData? data) {}); - await ServicesBinding.instance?.defaultBinaryMessenger + await _ambiguate(ServicesBinding.instance) + ?.defaultBinaryMessenger .handlePlatformMessage( "flutter.io/videoPlayer/videoEvents123", const StandardMethodCodec() @@ -281,7 +287,8 @@ void main() { }), (ByteData? data) {}); - await ServicesBinding.instance?.defaultBinaryMessenger + await _ambiguate(ServicesBinding.instance) + ?.defaultBinaryMessenger .handlePlatformMessage( "flutter.io/videoPlayer/videoEvents123", const StandardMethodCodec() @@ -325,3 +332,10 @@ void main() { }); }); } + +/// This allows a value of type T or T? to be treated as a value of type T?. +/// +/// We use this so that APIs that have become non-nullable can still be used +/// with `!` and `?` on the stable branch. +// TODO(ianh): Remove this once we roll stable in late 2021. +T? _ambiguate(T? value) => value; diff --git a/packages/webview_flutter/test/webview_flutter_test.dart b/packages/webview_flutter/test/webview_flutter_test.dart index 4360484408b5..5efee6d9952d 100644 --- a/packages/webview_flutter/test/webview_flutter_test.dart +++ b/packages/webview_flutter/test/webview_flutter_test.dart @@ -1019,7 +1019,8 @@ class FakePlatformWebView { }; final ByteData data = codec .encodeMethodCall(MethodCall('javascriptChannelMessage', arguments)); - ServicesBinding.instance!.defaultBinaryMessenger + _ambiguate(ServicesBinding.instance)! + .defaultBinaryMessenger .handlePlatformMessage(channel.name, data, (ByteData? data) {}); } @@ -1038,7 +1039,8 @@ class FakePlatformWebView { }; final ByteData data = codec.encodeMethodCall(MethodCall('navigationRequest', arguments)); - ServicesBinding.instance!.defaultBinaryMessenger + _ambiguate(ServicesBinding.instance)! + .defaultBinaryMessenger .handlePlatformMessage(channel.name, data, (ByteData? data) { final bool allow = codec.decodeEnvelope(data!); if (allow) { @@ -1055,11 +1057,13 @@ class FakePlatformWebView { {'url': currentUrl}, )); - ServicesBinding.instance!.defaultBinaryMessenger.handlePlatformMessage( - channel.name, - data, - (ByteData? data) {}, - ); + _ambiguate(ServicesBinding.instance)! + .defaultBinaryMessenger + .handlePlatformMessage( + channel.name, + data, + (ByteData? data) {}, + ); } void fakeOnPageFinishedCallback() { @@ -1070,11 +1074,13 @@ class FakePlatformWebView { {'url': currentUrl}, )); - ServicesBinding.instance!.defaultBinaryMessenger.handlePlatformMessage( - channel.name, - data, - (ByteData? data) {}, - ); + _ambiguate(ServicesBinding.instance)! + .defaultBinaryMessenger + .handlePlatformMessage( + channel.name, + data, + (ByteData? data) {}, + ); } void fakeOnProgressCallback(int progress) { @@ -1085,7 +1091,8 @@ class FakePlatformWebView { {'progress': progress}, )); - ServicesBinding.instance!.defaultBinaryMessenger + _ambiguate(ServicesBinding.instance)! + .defaultBinaryMessenger .handlePlatformMessage(channel.name, data, (ByteData? data) {}); } @@ -1244,3 +1251,10 @@ class MatchesCreationParams extends Matcher { .matches(creationParams.javascriptChannelNames, matchState); } } + +/// This allows a value of type T or T? to be treated as a value of type T?. +/// +/// We use this so that APIs that have become non-nullable can still be used +/// with `!` and `?` on the stable branch. +// TODO(ianh): Remove this once we roll stable in late 2021. +T? _ambiguate(T? value) => value;