From b57c5025159ba6f3c5703e2a6d2e433e4809bfcc Mon Sep 17 00:00:00 2001 From: Dan Field Date: Tue, 13 Jul 2021 13:46:53 -0700 Subject: [PATCH] Scenario nnbd (#27365) * Revert "Revert "NNBD migration for scenario_app (#27362)" (#27364)" This reverts commit 57720b2f367987e242e6cbaf09dd03688c2d8537. * analysis issues * no sound null safety because frontend_server is not --- testing/scenario_app/lib/main.dart | 12 ++--- .../lib/src/animated_color_square.dart | 7 ++- .../scenario_app/lib/src/bogus_font_text.dart | 1 - .../scenario_app/lib/src/channel_util.dart | 20 +++---- .../lib/src/initial_route_reply.dart | 1 - .../lib/src/locale_initialization.dart | 2 - .../lib/src/platform_echo_mixin.dart | 5 +- .../scenario_app/lib/src/platform_view.dart | 54 +++++++++---------- .../scenario_app/lib/src/poppable_screen.dart | 5 +- testing/scenario_app/lib/src/scenario.dart | 5 +- testing/scenario_app/lib/src/scenarios.dart | 9 ++-- .../lib/src/send_text_focus_semantics.dart | 2 - .../lib/src/touches_scenario.dart | 2 - testing/scenario_app/pubspec.yaml | 4 +- 14 files changed, 54 insertions(+), 75 deletions(-) diff --git a/testing/scenario_app/lib/main.dart b/testing/scenario_app/lib/main.dart index 6cde43d198..c50de0d0a6 100644 --- a/testing/scenario_app/lib/main.dart +++ b/testing/scenario_app/lib/main.dart @@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -// @dart = 2.6 + import 'dart:convert'; import 'dart:developer' as developer; import 'dart:io'; @@ -27,7 +27,7 @@ void main() { } void _handleDriverMessage(Map call) { - final String methodName = call['method'] as String; + final String? methodName = call['method'] as String?; switch (methodName) { case 'set_scenario': assert(call['args'] != null); @@ -39,7 +39,7 @@ void _handleDriverMessage(Map call) { } Future _handlePlatformMessage( - String name, ByteData data, PlatformMessageResponseCallback callback) async { + String name, ByteData? data, PlatformMessageResponseCallback? callback) async { if (data != null) { print('$name = ${utf8.decode(data.buffer.asUint8List())}'); } else { @@ -48,11 +48,11 @@ Future _handlePlatformMessage( switch (name) { case 'driver': - _handleDriverMessage(json.decode(utf8.decode(data.buffer.asUint8List())) as Map); + _handleDriverMessage(json.decode(utf8.decode(data!.buffer.asUint8List())) as Map); break; case 'write_timeline': final String timelineData = await _getTimelineData(); - callback(Uint8List.fromList(utf8.encode(timelineData)).buffer.asByteData()); + callback!(Uint8List.fromList(utf8.encode(timelineData)).buffer.asByteData()); break; default: currentScenario?.onPlatformMessage(name, data, callback); @@ -61,7 +61,7 @@ Future _handlePlatformMessage( Future _getTimelineData() async { final developer.ServiceProtocolInfo info = await developer.Service.getInfo(); - final Uri vmServiceTimelineUri = info.serverUri.resolve('getVMTimeline'); + final Uri vmServiceTimelineUri = info.serverUri!.resolve('getVMTimeline'); final Map vmServiceTimelineJson = await _getJson(vmServiceTimelineUri); final Map vmServiceResult = vmServiceTimelineJson['result'] as Map; return json.encode({ diff --git a/testing/scenario_app/lib/src/animated_color_square.dart b/testing/scenario_app/lib/src/animated_color_square.dart index b85f20d4d4..d1459038fd 100644 --- a/testing/scenario_app/lib/src/animated_color_square.dart +++ b/testing/scenario_app/lib/src/animated_color_square.dart @@ -2,7 +2,6 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -// @dart = 2.6 import 'dart:math' as math; import 'dart:ui'; @@ -77,11 +76,11 @@ class AnimatedColorSquareScenario extends Scenario { } class _NumberSwinger { - _NumberSwinger(this._begin, this._end, [this._current]) + _NumberSwinger(this._begin, this._end, [T? current]) : assert(_begin != null), assert(_end != null), _up = _begin < _end { - _current ??= _begin; + _current = current ?? _begin; } final T _begin; @@ -89,7 +88,7 @@ class _NumberSwinger { /// The current value of the swinger. T get current => _current; - T _current; + late T _current; bool _up; diff --git a/testing/scenario_app/lib/src/bogus_font_text.dart b/testing/scenario_app/lib/src/bogus_font_text.dart index bbde7cda99..6a80f8354a 100644 --- a/testing/scenario_app/lib/src/bogus_font_text.dart +++ b/testing/scenario_app/lib/src/bogus_font_text.dart @@ -2,7 +2,6 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -// @dart = 2.6 import 'dart:ui'; import 'channel_util.dart'; diff --git a/testing/scenario_app/lib/src/channel_util.dart b/testing/scenario_app/lib/src/channel_util.dart index e1e8b2ac5e..bc906f3129 100644 --- a/testing/scenario_app/lib/src/channel_util.dart +++ b/testing/scenario_app/lib/src/channel_util.dart @@ -2,21 +2,17 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -// @dart = 2.6 - import 'dart:convert'; import 'dart:ui'; -import 'package:meta/meta.dart'; - /// Util method to replicate the behavior of a `MethodChannel` in the Flutter /// framework. void sendJsonMethodCall({ - @required PlatformDispatcher dispatcher, - @required String channel, - @required String method, + required PlatformDispatcher dispatcher, + required String channel, + required String method, dynamic arguments, - PlatformMessageResponseCallback callback, + PlatformMessageResponseCallback? callback, }) { sendJsonMessage( dispatcher: dispatcher, @@ -30,10 +26,10 @@ void sendJsonMethodCall({ /// Send a JSON message over a channel. void sendJsonMessage({ - @required PlatformDispatcher dispatcher, - @required String channel, - @required Map json, - PlatformMessageResponseCallback callback, + required PlatformDispatcher dispatcher, + required String channel, + required Map json, + PlatformMessageResponseCallback? callback, }) { dispatcher.sendPlatformMessage( channel, diff --git a/testing/scenario_app/lib/src/initial_route_reply.dart b/testing/scenario_app/lib/src/initial_route_reply.dart index 7bf37362be..7395a7f93c 100644 --- a/testing/scenario_app/lib/src/initial_route_reply.dart +++ b/testing/scenario_app/lib/src/initial_route_reply.dart @@ -2,7 +2,6 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -// @dart = 2.6 import 'dart:ui'; import 'channel_util.dart'; diff --git a/testing/scenario_app/lib/src/locale_initialization.dart b/testing/scenario_app/lib/src/locale_initialization.dart index b7ecddb081..1a9d73fd43 100644 --- a/testing/scenario_app/lib/src/locale_initialization.dart +++ b/testing/scenario_app/lib/src/locale_initialization.dart @@ -2,8 +2,6 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -// @dart = 2.6 - import 'dart:typed_data'; import 'dart:ui'; diff --git a/testing/scenario_app/lib/src/platform_echo_mixin.dart b/testing/scenario_app/lib/src/platform_echo_mixin.dart index 2e735d86c6..7d9e5d771d 100644 --- a/testing/scenario_app/lib/src/platform_echo_mixin.dart +++ b/testing/scenario_app/lib/src/platform_echo_mixin.dart @@ -2,7 +2,6 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -// @dart = 2.6 import 'dart:typed_data'; import 'dart:ui'; @@ -13,8 +12,8 @@ mixin PlatformEchoMixin on Scenario { @override void onPlatformMessage( String name, - ByteData data, - PlatformMessageResponseCallback callback, + ByteData? data, + PlatformMessageResponseCallback? callback, ) { window.sendPlatformMessage(name, data, null); } diff --git a/testing/scenario_app/lib/src/platform_view.dart b/testing/scenario_app/lib/src/platform_view.dart index 81c08a42bb..fd0835a8b9 100644 --- a/testing/scenario_app/lib/src/platform_view.dart +++ b/testing/scenario_app/lib/src/platform_view.dart @@ -2,7 +2,6 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -// @dart = 2.6 import 'dart:convert'; import 'dart:io'; import 'dart:typed_data'; @@ -33,7 +32,7 @@ class PlatformViewScenario extends Scenario with _BasePlatformViewScenarioMixin /// Creates the PlatformView scenario. /// /// The [dispatcher] parameter must not be null. - PlatformViewScenario(PlatformDispatcher dispatcher, String text, { this.id }) + PlatformViewScenario(PlatformDispatcher dispatcher, String text, { required this.id }) : assert(dispatcher != null), super(dispatcher) { createPlatformView(dispatcher, text, id); @@ -58,7 +57,7 @@ class NonFullScreenFlutterViewPlatformViewScenario extends Scenario /// The [dispatcher] parameter must not be null. NonFullScreenFlutterViewPlatformViewScenario( PlatformDispatcher dispatcher, String text, - {this.id}) + {required this.id}) : assert(dispatcher != null), super(dispatcher) { createPlatformView(dispatcher, text, id); @@ -80,7 +79,7 @@ class PlatformViewNoOverlayIntersectionScenario extends Scenario with _BasePlatf /// Creates the PlatformView scenario. /// /// The [dispatcher] parameter must not be null. - PlatformViewNoOverlayIntersectionScenario(PlatformDispatcher dispatcher, String text, { this.id }) + PlatformViewNoOverlayIntersectionScenario(PlatformDispatcher dispatcher, String text, { required this.id }) : assert(dispatcher != null), super(dispatcher) { createPlatformView(dispatcher, text, id); @@ -106,7 +105,7 @@ class PlatformViewPartialIntersectionScenario extends Scenario with _BasePlatfor /// Creates the PlatformView scenario. /// /// The [dispatcher] parameter must not be null. - PlatformViewPartialIntersectionScenario(PlatformDispatcher dispatcher, String text, { this.id }) + PlatformViewPartialIntersectionScenario(PlatformDispatcher dispatcher, String text, { required this.id }) : assert(dispatcher != null), super(dispatcher) { createPlatformView(dispatcher, text, id); @@ -132,7 +131,7 @@ class PlatformViewTwoIntersectingOverlaysScenario extends Scenario with _BasePla /// Creates the PlatformView scenario. /// /// The [dispatcher] parameter must not be null. - PlatformViewTwoIntersectingOverlaysScenario(PlatformDispatcher dispatcher, String text, { this.id }) + PlatformViewTwoIntersectingOverlaysScenario(PlatformDispatcher dispatcher, String text, { required this.id }) : assert(dispatcher != null), super(dispatcher) { createPlatformView(dispatcher, text, id); @@ -171,7 +170,7 @@ class PlatformViewOneOverlayTwoIntersectingOverlaysScenario extends Scenario wit /// Creates the PlatformView scenario. /// /// The [dispatcher] parameter must not be null. - PlatformViewOneOverlayTwoIntersectingOverlaysScenario(PlatformDispatcher dispatcher, String text, { this.id }) + PlatformViewOneOverlayTwoIntersectingOverlaysScenario(PlatformDispatcher dispatcher, String text, { required this.id }) : assert(dispatcher != null), super(dispatcher) { createPlatformView(dispatcher, text, id); @@ -215,7 +214,7 @@ class MultiPlatformViewWithoutOverlaysScenario extends Scenario with _BasePlatfo /// Creates the PlatformView scenario. /// /// The [dispatcher] parameter must not be null. - MultiPlatformViewWithoutOverlaysScenario(PlatformDispatcher dispatcher, String text, { this.firstId, this.secondId }) + MultiPlatformViewWithoutOverlaysScenario(PlatformDispatcher dispatcher, String text, { required this.firstId, required this.secondId }) : assert(dispatcher != null), super(dispatcher) { createPlatformView(dispatcher, text, firstId); @@ -259,7 +258,7 @@ class PlatformViewMaxOverlaysScenario extends Scenario with _BasePlatformViewSce /// Creates the PlatformView scenario. /// /// The [dispatcher] parameter must not be null. - PlatformViewMaxOverlaysScenario(PlatformDispatcher dispatcher, String text, { this.id }) + PlatformViewMaxOverlaysScenario(PlatformDispatcher dispatcher, String text, { required this.id }) : assert(dispatcher != null), super(dispatcher) { createPlatformView(dispatcher, text, id); @@ -308,7 +307,7 @@ class MultiPlatformViewScenario extends Scenario with _BasePlatformViewScenarioM /// Creates the PlatformView scenario. /// /// The [dispatcher] parameter must not be null. - MultiPlatformViewScenario(PlatformDispatcher dispatcher, {this.firstId, this.secondId}) + MultiPlatformViewScenario(PlatformDispatcher dispatcher, {required this.firstId, required this.secondId}) : assert(dispatcher != null), super(dispatcher) { createPlatformView(dispatcher, 'platform view 1', firstId); @@ -342,7 +341,7 @@ class MultiPlatformViewBackgroundForegroundScenario extends Scenario with _BaseP /// Creates the PlatformView scenario. /// /// The [dispatcher] parameter must not be null. - MultiPlatformViewBackgroundForegroundScenario(PlatformDispatcher dispatcher, {this.firstId, this.secondId}) + MultiPlatformViewBackgroundForegroundScenario(PlatformDispatcher dispatcher, {required this.firstId, required this.secondId}) : assert(dispatcher != null), super(dispatcher) { _nextFrame = _firstFrame; @@ -361,7 +360,7 @@ class MultiPlatformViewBackgroundForegroundScenario extends Scenario with _BaseP _nextFrame(); } - VoidCallback _nextFrame; + late VoidCallback _nextFrame; void _firstFrame() { final SceneBuilder builder = SceneBuilder(); @@ -407,13 +406,13 @@ class MultiPlatformViewBackgroundForegroundScenario extends Scenario with _BaseP @override void onPlatformMessage( String name, - ByteData data, - PlatformMessageResponseCallback callback, + ByteData? data, + PlatformMessageResponseCallback? callback, ) { if (name != 'flutter/lifecycle') { return; } - final String message = utf8.decode(data.buffer.asUint8List()); + final String message = utf8.decode(data!.buffer.asUint8List()); if (_lastLifecycleState == 'AppLifecycleState.inactive' && message == 'AppLifecycleState.resumed') { _nextFrame = _secondFrame; window.scheduleFrame(); @@ -426,7 +425,7 @@ class MultiPlatformViewBackgroundForegroundScenario extends Scenario with _BaseP /// Platform view with clip rect. class PlatformViewClipRectScenario extends Scenario with _BasePlatformViewScenarioMixin { /// Constructs a platform view with clip rect scenario. - PlatformViewClipRectScenario(PlatformDispatcher dispatcher, String text, { this.id }) + PlatformViewClipRectScenario(PlatformDispatcher dispatcher, String text, { required this.id }) : assert(dispatcher != null), super(dispatcher) { createPlatformView(dispatcher, text, id); @@ -524,15 +523,10 @@ class PlatformViewOpacityScenario extends PlatformViewScenario { /// A simple platform view for testing touch events from iOS. class PlatformViewForTouchIOSScenario extends Scenario with _BasePlatformViewScenarioMixin { - - int _viewId; - bool _accept; - - VoidCallback _nextFrame; /// Creates the PlatformView scenario. /// /// The [dispatcher] parameter must not be null. - PlatformViewForTouchIOSScenario(PlatformDispatcher dispatcher, String text, {int id = 0, bool accept, bool rejectUntilTouchesEnded = false}) + PlatformViewForTouchIOSScenario(PlatformDispatcher dispatcher, String text, {int id = 0, required bool accept, bool rejectUntilTouchesEnded = false}) : assert(dispatcher != null), _accept = accept, _viewId = id, @@ -545,6 +539,10 @@ class PlatformViewForTouchIOSScenario extends Scenario _nextFrame = _firstFrame; } + int _viewId; + bool _accept; + late VoidCallback _nextFrame; + @override void onBeginFrame(Duration duration) { _nextFrame(); @@ -587,7 +585,7 @@ class PlatformViewForTouchIOSScenario extends Scenario window.sendPlatformMessage( 'flutter/platform_views', message.buffer.asByteData(), - (ByteData response) {}, + (ByteData? response) {}, ); } @@ -622,10 +620,10 @@ class PlatformViewWithContinuousTexture extends PlatformViewScenario { } mixin _BasePlatformViewScenarioMixin on Scenario { - int _textureId; + int? _textureId; bool get usesAndroidHybridComposition { - return (scenarioParams['use_android_view'] as bool) == true; + return (scenarioParams['use_android_view'] as bool?) == true; } /// Construct the platform view related scenario @@ -702,7 +700,7 @@ mixin _BasePlatformViewScenarioMixin on Scenario { dispatcher.sendPlatformMessage( 'flutter/platform_views', message.buffer.asByteData(), - (ByteData response) { + (ByteData? response) { if (response != null && Platform.isAndroid && !usesAndroidHybridComposition) { // Envelope. _textureId = response.getUint8(0); @@ -723,7 +721,7 @@ mixin _BasePlatformViewScenarioMixin on Scenario { if (usesAndroidHybridComposition) { sceneBuilder.addPlatformView(viewId, width: width, height: height); } else if (_textureId != null) { - sceneBuilder.addTexture(_textureId, width: width, height: height); + sceneBuilder.addTexture(_textureId!, width: width, height: height); } } else { throw UnsupportedError('Platform ${Platform.operatingSystem} is not supported'); @@ -734,7 +732,7 @@ mixin _BasePlatformViewScenarioMixin on Scenario { void finishBuilderByAddingPlatformViewAndPicture( SceneBuilder sceneBuilder, int viewId, { - Offset overlayOffset, + Offset? overlayOffset, }) { overlayOffset ??= const Offset(50, 50); _addPlatformViewToScene( diff --git a/testing/scenario_app/lib/src/poppable_screen.dart b/testing/scenario_app/lib/src/poppable_screen.dart index 1657c4bc87..cb5c5a62c7 100644 --- a/testing/scenario_app/lib/src/poppable_screen.dart +++ b/testing/scenario_app/lib/src/poppable_screen.dart @@ -2,7 +2,6 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -// @dart = 2.6 import 'dart:ui'; import 'package:scenario_app/src/channel_util.dart'; @@ -20,7 +19,7 @@ class PoppableScreenScenario extends Scenario with PlatformEchoMixin { super(dispatcher); // Rect for the pop button. Only defined once onMetricsChanged is called. - Rect _buttonRect; + Rect? _buttonRect; @override void onBeginFrame(Duration duration) { @@ -32,7 +31,7 @@ class PoppableScreenScenario extends Scenario with PlatformEchoMixin { if (_buttonRect != null) { canvas.drawRect( - _buttonRect, + _buttonRect!, Paint()..color = const Color.fromARGB(255, 255, 0, 0), ); } diff --git a/testing/scenario_app/lib/src/scenario.dart b/testing/scenario_app/lib/src/scenario.dart index 94319e692e..f0e9267dae 100644 --- a/testing/scenario_app/lib/src/scenario.dart +++ b/testing/scenario_app/lib/src/scenario.dart @@ -2,7 +2,6 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -// @dart = 2.6 import 'dart:typed_data'; import 'dart:ui'; @@ -59,7 +58,7 @@ abstract class Scenario { /// See [PlatformDispatcher.onPlatformMessage]. void onPlatformMessage( String name, - ByteData data, - PlatformMessageResponseCallback callback, + ByteData? data, + PlatformMessageResponseCallback? callback, ) {} } diff --git a/testing/scenario_app/lib/src/scenarios.dart b/testing/scenario_app/lib/src/scenarios.dart index c8527f4e0f..33d579f6a6 100644 --- a/testing/scenario_app/lib/src/scenarios.dart +++ b/testing/scenario_app/lib/src/scenarios.dart @@ -2,7 +2,6 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -// @dart = 2.6 import 'dart:ui'; import 'animated_color_square.dart'; @@ -53,7 +52,7 @@ Map _scenarios = { Map _currentScenarioParams = {}; -Scenario _currentScenarioInstance; +Scenario? _currentScenarioInstance; /// Loads an scenario. /// The map must contain a `name` entry, which equals to the name of the scenario. @@ -63,16 +62,16 @@ void loadScenario(Map scenario) { _currentScenarioParams = scenario; if (_currentScenarioInstance != null) { - _currentScenarioInstance.unmount(); + _currentScenarioInstance!.unmount(); } - _currentScenarioInstance = _scenarios[scenario['name']](); + _currentScenarioInstance = _scenarios[scenario['name']]!(); window.scheduleFrame(); print('Loading scenario $scenarioName'); } /// Gets the loaded [Scenario]. -Scenario get currentScenario { +Scenario? get currentScenario { return _currentScenarioInstance; } diff --git a/testing/scenario_app/lib/src/send_text_focus_semantics.dart b/testing/scenario_app/lib/src/send_text_focus_semantics.dart index de3ce9eb36..94997cf070 100644 --- a/testing/scenario_app/lib/src/send_text_focus_semantics.dart +++ b/testing/scenario_app/lib/src/send_text_focus_semantics.dart @@ -2,8 +2,6 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -// @dart = 2.6 - import 'dart:typed_data'; import 'dart:ui'; diff --git a/testing/scenario_app/lib/src/touches_scenario.dart b/testing/scenario_app/lib/src/touches_scenario.dart index 24da2c1ca5..c6764780d7 100644 --- a/testing/scenario_app/lib/src/touches_scenario.dart +++ b/testing/scenario_app/lib/src/touches_scenario.dart @@ -2,8 +2,6 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -// @dart = 2.6 - import 'dart:ui'; import 'channel_util.dart'; diff --git a/testing/scenario_app/pubspec.yaml b/testing/scenario_app/pubspec.yaml index 7d7dc49f7a..b28b71147e 100644 --- a/testing/scenario_app/pubspec.yaml +++ b/testing/scenario_app/pubspec.yaml @@ -5,7 +5,7 @@ name: scenario_app publish_to: none environment: - sdk: '>=2.12.0-0 <3.0.0' + sdk: '>=2.12.0 <3.0.0' # Do not add any dependencies that require more than what is provided in # //third_party/dart/pkg, //third_party/dart/third_party/pkg, or @@ -19,8 +19,6 @@ dependencies: vector_math: any dependency_overrides: - meta: - path: ../../../third_party/dart/pkg/meta sky_engine: path: ../../sky/packages/sky_engine vector_math: -- GitLab