From a599c08c329cada6696abd10cfdf0e6a139b2a2b Mon Sep 17 00:00:00 2001 From: Michael Goderbauer Date: Tue, 14 Mar 2023 17:34:34 -0700 Subject: [PATCH] Remvoe last few references to window singleton (#122644) Remove last few references to window singleton --- packages/flutter/lib/src/gestures/binding.dart | 2 +- packages/flutter/lib/src/rendering/binding.dart | 7 ++++--- .../gestures/gesture_binding_resample_event_test.dart | 8 +++++--- packages/flutter/test/material/menu_anchor_test.dart | 10 ++-------- .../test/rendering/mouse_tracker_cursor_test.dart | 5 +++-- .../flutter/test/rendering/mouse_tracker_test.dart | 5 +++-- .../flutter/test/rendering/platform_view_test.dart | 5 +++-- packages/flutter/test/widgets/media_query_test.dart | 2 +- packages/flutter/test/widgets/navigator_test.dart | 8 ++++---- .../reparent_state_with_layout_builder_test.dart | 2 +- .../flutter/test/widgets/scroll_position_test.dart | 2 +- .../flutter/test/widgets/semantics_debugger_test.dart | 2 +- packages/flutter_test/lib/src/_matchers_web.dart | 5 +++-- packages/flutter_test/lib/src/binding.dart | 9 +++++---- .../flutter_test/test/accessibility_window_test.dart | 10 ++++++---- packages/flutter_test/test/live_binding_test.dart | 4 ++-- .../test/widget_tester_live_device_test.dart | 4 ++-- packages/integration_test/lib/integration_test.dart | 7 ++++--- 18 files changed, 51 insertions(+), 46 deletions(-) diff --git a/packages/flutter/lib/src/gestures/binding.dart b/packages/flutter/lib/src/gestures/binding.dart index 023b0d57ed..67f665ad85 100644 --- a/packages/flutter/lib/src/gestures/binding.dart +++ b/packages/flutter/lib/src/gestures/binding.dart @@ -288,7 +288,7 @@ mixin GestureBinding on BindingBase implements HitTestable, HitTestDispatcher, H // We convert pointer data to logical pixels so that e.g. the touch slop can be // defined in a device-independent manner. try { - _pendingPointerEvents.addAll(PointerEventConverter.expand(packet.data, window.devicePixelRatio)); + _pendingPointerEvents.addAll(PointerEventConverter.expand(packet.data, platformDispatcher.implicitView!.devicePixelRatio)); if (!locked) { _flushPointerEventQueue(); } diff --git a/packages/flutter/lib/src/rendering/binding.dart b/packages/flutter/lib/src/rendering/binding.dart index 49e2213921..54bc234661 100644 --- a/packages/flutter/lib/src/rendering/binding.dart +++ b/packages/flutter/lib/src/rendering/binding.dart @@ -212,7 +212,7 @@ mixin RendererBinding on BindingBase, ServicesBinding, SchedulerBinding, Gesture _debugIsRenderViewInitialized = true; return true; }()); - renderView = RenderView(configuration: createViewConfiguration(), window: window); + renderView = RenderView(configuration: createViewConfiguration(), window: platformDispatcher.implicitView!); renderView.prepareInitialFrame(); } bool _debugIsRenderViewInitialized = false; @@ -300,9 +300,10 @@ mixin RendererBinding on BindingBase, ServicesBinding, SchedulerBinding, Gesture /// this to force the display into 800x600 when a test is run on the device /// using `flutter run`. ViewConfiguration createViewConfiguration() { - final double devicePixelRatio = window.devicePixelRatio; + final FlutterView view = platformDispatcher.implicitView!; + final double devicePixelRatio = view.devicePixelRatio; return ViewConfiguration( - size: window.physicalSize / devicePixelRatio, + size: view.physicalSize / devicePixelRatio, devicePixelRatio: devicePixelRatio, ); } diff --git a/packages/flutter/test/gestures/gesture_binding_resample_event_test.dart b/packages/flutter/test/gestures/gesture_binding_resample_event_test.dart index 71433d1ce7..a03c4b022a 100644 --- a/packages/flutter/test/gestures/gesture_binding_resample_event_test.dart +++ b/packages/flutter/test/gestures/gesture_binding_resample_event_test.dart @@ -140,7 +140,7 @@ void main() { expect(events.length, 1); expect(events[0], isA()); expect(events[0].timeStamp, binding.frameTime! + samplingOffset); - expect(events[0].position, Offset(0.0 / GestureBinding.instance.window.devicePixelRatio, 0.0)); + expect(events[0].position, Offset(0.0 / _devicePixelRatio, 0.0)); // Second frame callback should have been requested. callback = binding.postFrameCallback; @@ -155,8 +155,8 @@ void main() { expect(events.length, 2); expect(events[1], isA()); expect(events[1].timeStamp, binding.frameTime! + samplingOffset); - expect(events[1].position, Offset(10.0 / GestureBinding.instance.window.devicePixelRatio, 0.0)); - expect(events[1].delta, Offset(10.0 / GestureBinding.instance.window.devicePixelRatio, 0.0)); + expect(events[1].position, Offset(10.0 / _devicePixelRatio, 0.0)); + expect(events[1].delta, Offset(10.0 / _devicePixelRatio, 0.0)); // Verify that resampling continues without a frame callback. async.elapse(frameInterval * 1.5); @@ -183,3 +183,5 @@ void main() { GestureBinding.instance.resamplingEnabled = false; }); } + +double get _devicePixelRatio => GestureBinding.instance.platformDispatcher.implicitView!.devicePixelRatio; diff --git a/packages/flutter/test/material/menu_anchor_test.dart b/packages/flutter/test/material/menu_anchor_test.dart index ab24b201d5..e36c7f91a8 100644 --- a/packages/flutter/test/material/menu_anchor_test.dart +++ b/packages/flutter/test/material/menu_anchor_test.dart @@ -18,7 +18,6 @@ void main() { final List opened = []; final List closed = []; final GlobalKey menuItemKey = GlobalKey(); - late Size defaultSize; void onPressed(TestMenu item) { selected.add(item); @@ -36,11 +35,6 @@ void main() { focusedMenu = (primaryFocus?.debugLabel ?? primaryFocus).toString(); } - setUpAll(() { - final MediaQueryData mediaQueryData = MediaQueryData.fromView(TestWidgetsFlutterBinding.instance.window); - defaultSize = mediaQueryData.size; - }); - setUp(() { focusedMenu = null; selected.clear(); @@ -53,7 +47,7 @@ void main() { Future changeSurfaceSize(WidgetTester tester, Size size) async { await tester.binding.setSurfaceSize(size); addTearDown(() async { - await tester.binding.setSurfaceSize(defaultSize); + await tester.binding.setSurfaceSize(null); }); } @@ -1395,7 +1389,7 @@ void main() { testWidgets('menus close on view size change', (WidgetTester tester) async { final ScrollController scrollController = ScrollController(); - final MediaQueryData mediaQueryData = MediaQueryData.fromView(tester.binding.window); + final MediaQueryData mediaQueryData = MediaQueryData.fromView(tester.view); Widget build(Size size) { return MaterialApp( diff --git a/packages/flutter/test/rendering/mouse_tracker_cursor_test.dart b/packages/flutter/test/rendering/mouse_tracker_cursor_test.dart index 4c19e443e0..fc155a7646 100644 --- a/packages/flutter/test/rendering/mouse_tracker_cursor_test.dart +++ b/packages/flutter/test/rendering/mouse_tracker_cursor_test.dart @@ -438,10 +438,11 @@ ui.PointerData _pointerData( int device = 0, PointerDeviceKind kind = PointerDeviceKind.mouse, }) { + final double devicePixelRatio = RendererBinding.instance.platformDispatcher.implicitView!.devicePixelRatio; return ui.PointerData( change: change, - physicalX: logicalPosition.dx * RendererBinding.instance.window.devicePixelRatio, - physicalY: logicalPosition.dy * RendererBinding.instance.window.devicePixelRatio, + physicalX: logicalPosition.dx * devicePixelRatio, + physicalY: logicalPosition.dy * devicePixelRatio, kind: kind, device: device, ); diff --git a/packages/flutter/test/rendering/mouse_tracker_test.dart b/packages/flutter/test/rendering/mouse_tracker_test.dart index 9caf496878..d624410c21 100644 --- a/packages/flutter/test/rendering/mouse_tracker_test.dart +++ b/packages/flutter/test/rendering/mouse_tracker_test.dart @@ -592,10 +592,11 @@ ui.PointerData _pointerData( int device = 0, PointerDeviceKind kind = PointerDeviceKind.mouse, }) { + final double devicePixelRatio = RendererBinding.instance.platformDispatcher.implicitView!.devicePixelRatio; return ui.PointerData( change: change, - physicalX: logicalPosition.dx * RendererBinding.instance.window.devicePixelRatio, - physicalY: logicalPosition.dy * RendererBinding.instance.window.devicePixelRatio, + physicalX: logicalPosition.dx * devicePixelRatio, + physicalY: logicalPosition.dy * devicePixelRatio, kind: kind, device: device, ); diff --git a/packages/flutter/test/rendering/platform_view_test.dart b/packages/flutter/test/rendering/platform_view_test.dart index b05fe53184..baee5bc545 100644 --- a/packages/flutter/test/rendering/platform_view_test.dart +++ b/packages/flutter/test/rendering/platform_view_test.dart @@ -305,12 +305,13 @@ ui.PointerData _pointerData( PointerDeviceKind kind = PointerDeviceKind.mouse, int pointer = 0, }) { + final double devicePixelRatio = RendererBinding.instance.platformDispatcher.implicitView!.devicePixelRatio; return ui.PointerData( pointerIdentifier: pointer, embedderId: pointer, change: change, - physicalX: logicalPosition.dx * RendererBinding.instance.window.devicePixelRatio, - physicalY: logicalPosition.dy * RendererBinding.instance.window.devicePixelRatio, + physicalX: logicalPosition.dx * devicePixelRatio, + physicalY: logicalPosition.dy * devicePixelRatio, kind: kind, device: device, ); diff --git a/packages/flutter/test/widgets/media_query_test.dart b/packages/flutter/test/widgets/media_query_test.dart index 3b27e84ccb..9f3982eaf7 100644 --- a/packages/flutter/test/widgets/media_query_test.dart +++ b/packages/flutter/test/widgets/media_query_test.dart @@ -1098,7 +1098,7 @@ void main() { }); testWidgets('MediaQueryData.fromWindow is created using window values', (WidgetTester tester) async { - final MediaQueryData windowData = MediaQueryData.fromWindow(tester.binding.window); + final MediaQueryData windowData = MediaQueryData.fromWindow(tester.view); late MediaQueryData fromWindowData; await tester.pumpWidget( diff --git a/packages/flutter/test/widgets/navigator_test.dart b/packages/flutter/test/widgets/navigator_test.dart index 857a549efd..d33d4900d8 100644 --- a/packages/flutter/test/widgets/navigator_test.dart +++ b/packages/flutter/test/widgets/navigator_test.dart @@ -206,7 +206,7 @@ void main() { const MaterialPage page = MaterialPage(child: Text('page')); await tester.pumpWidget( MediaQuery( - data: MediaQueryData.fromView(tester.binding.window), + data: MediaQueryData.fromView(tester.view), child: Directionality( textDirection: TextDirection.ltr, child: Navigator( @@ -221,7 +221,7 @@ void main() { await tester.pumpWidget( MediaQuery( - data: MediaQueryData.fromView(tester.binding.window), + data: MediaQueryData.fromView(tester.view), child: Directionality( textDirection: TextDirection.ltr, child: Navigator( @@ -2810,7 +2810,7 @@ void main() { await tester.pumpWidget( MediaQuery( - data: MediaQueryData.fromView(tester.binding.window), + data: MediaQueryData.fromView(tester.view), child: Localizations( locale: const Locale('en', 'US'), delegates: const >[ @@ -2849,7 +2849,7 @@ void main() { }; await tester.pumpWidget( MediaQuery( - data: MediaQueryData.fromView(tester.binding.window), + data: MediaQueryData.fromView(tester.view), child: Localizations( locale: const Locale('en', 'US'), delegates: const >[ diff --git a/packages/flutter/test/widgets/reparent_state_with_layout_builder_test.dart b/packages/flutter/test/widgets/reparent_state_with_layout_builder_test.dart index 30b3a73ae8..9578888c30 100644 --- a/packages/flutter/test/widgets/reparent_state_with_layout_builder_test.dart +++ b/packages/flutter/test/widgets/reparent_state_with_layout_builder_test.dart @@ -96,7 +96,7 @@ void main() { Widget deepChild = Container(); await tester.pumpWidget(MediaQuery( - data: MediaQueryData.fromView(tester.binding.window), + data: MediaQueryData.fromView(tester.view), child: Column( children: [ StatefulBuilder(builder: (BuildContext context, StateSetter setState) { diff --git a/packages/flutter/test/widgets/scroll_position_test.dart b/packages/flutter/test/widgets/scroll_position_test.dart index 535a27e895..4ada8e22f3 100644 --- a/packages/flutter/test/widgets/scroll_position_test.dart +++ b/packages/flutter/test/widgets/scroll_position_test.dart @@ -34,7 +34,7 @@ Future performTest(WidgetTester tester, bool maintainState) async { Directionality( textDirection: TextDirection.ltr, child: MediaQuery( - data: MediaQueryData.fromView(tester.binding.window), + data: MediaQueryData.fromView(tester.view), child: Navigator( key: navigatorKey, onGenerateRoute: (RouteSettings settings) { diff --git a/packages/flutter/test/widgets/semantics_debugger_test.dart b/packages/flutter/test/widgets/semantics_debugger_test.dart index 436be698e9..1e469cb6f9 100644 --- a/packages/flutter/test/widgets/semantics_debugger_test.dart +++ b/packages/flutter/test/widgets/semantics_debugger_test.dart @@ -301,7 +301,7 @@ void main() { child: Directionality( textDirection: TextDirection.ltr, child: MediaQuery( - data: MediaQueryData.fromView(tester.binding.window), + data: MediaQueryData.fromView(tester.view), child: Material( child: Center( child: Slider( diff --git a/packages/flutter_test/lib/src/_matchers_web.dart b/packages/flutter_test/lib/src/_matchers_web.dart index 1fe0323ac5..11c8d815b1 100644 --- a/packages/flutter_test/lib/src/_matchers_web.dart +++ b/packages/flutter_test/lib/src/_matchers_web.dart @@ -58,12 +58,13 @@ class MatchesGoldenFile extends AsyncMatcher { final Size size = renderObject.paintBounds.size; final TestWidgetsFlutterBinding binding = TestWidgetsFlutterBinding.instance; final Element e = binding.renderViewElement!; + final ui.FlutterView view = binding.platformDispatcher.implicitView!; // Unlike `flutter_tester`, we don't have the ability to render an element // to an image directly. Instead, we will use `window.render()` to render // only the element being requested, and send a request to the test server // requesting it to take a screenshot through the browser's debug interface. - _renderElement(binding.window, renderObject); + _renderElement(view, renderObject); final String? result = await binding.runAsync(() async { if (autoUpdateGoldenFiles) { await webGoldenComparator.update(size.width, size.height, key); @@ -76,7 +77,7 @@ class MatchesGoldenFile extends AsyncMatcher { return ex.message; } }, additionalTime: const Duration(seconds: 22)); - _renderElement(binding.window, _findRepaintBoundary(e)); + _renderElement(view, _findRepaintBoundary(e)); return result; } diff --git a/packages/flutter_test/lib/src/binding.dart b/packages/flutter_test/lib/src/binding.dart index 05dd4b53ca..1ca3b90553 100644 --- a/packages/flutter_test/lib/src/binding.dart +++ b/packages/flutter_test/lib/src/binding.dart @@ -485,8 +485,9 @@ abstract class TestWidgetsFlutterBinding extends BindingBase @override ViewConfiguration createViewConfiguration() { - final double devicePixelRatio = window.devicePixelRatio; - final Size size = _surfaceSize ?? window.physicalSize / devicePixelRatio; + final FlutterView view = platformDispatcher.implicitView!; + final double devicePixelRatio = view.devicePixelRatio; + final Size size = _surfaceSize ?? view.physicalSize / devicePixelRatio; return ViewConfiguration( size: size, devicePixelRatio: devicePixelRatio, @@ -1730,7 +1731,7 @@ class LiveTestWidgetsFlutterBinding extends TestWidgetsFlutterBinding { renderView = _LiveTestRenderView( configuration: createViewConfiguration(), onNeedPaint: _handleViewNeedsPaint, - window: window, + window: platformDispatcher.implicitView!, ); renderView.prepareInitialFrame(); } @@ -1921,7 +1922,7 @@ class LiveTestWidgetsFlutterBinding extends TestWidgetsFlutterBinding { ViewConfiguration createViewConfiguration() { return TestViewConfiguration.fromView( size: _surfaceSize ?? _kDefaultTestViewportSize, - view: window, + view: platformDispatcher.implicitView!, ); } diff --git a/packages/flutter_test/test/accessibility_window_test.dart b/packages/flutter_test/test/accessibility_window_test.dart index 57dac2122a..f9c20b9bcf 100644 --- a/packages/flutter_test/test/accessibility_window_test.dart +++ b/packages/flutter_test/test/accessibility_window_test.dart @@ -7,8 +7,9 @@ import 'package:flutter_test/flutter_test.dart'; void main() { testWidgets('Fails correctly with configured screen size - small', (WidgetTester tester) async { - tester.binding.window.devicePixelRatioTestValue = 1.2; - tester.binding.window.physicalSizeTestValue = const Size(250, 300); + tester.view.devicePixelRatio = 1.2; + tester.view.physicalSize = const Size(250, 300); + addTearDown(tester.view.reset); final Widget invalidButton = ElevatedButton( onPressed: () {}, @@ -25,8 +26,9 @@ void main() { }); testWidgets('Fails correctly with configured screen size - large', (WidgetTester tester) async { - tester.binding.window.devicePixelRatioTestValue = 4.2; - tester.binding.window.physicalSizeTestValue = const Size(2500, 3000); + tester.view.devicePixelRatio = 4.2; + tester.view.physicalSize = const Size(2500, 3000); + addTearDown(tester.view.reset); final Widget invalidButton = ElevatedButton( onPressed: () {}, diff --git a/packages/flutter_test/test/live_binding_test.dart b/packages/flutter_test/test/live_binding_test.dart index c38bb0cce4..077f5ea452 100644 --- a/packages/flutter_test/test/live_binding_test.dart +++ b/packages/flutter_test/test/live_binding_test.dart @@ -71,8 +71,8 @@ void main() { testWidgets('setSurfaceSize works', (WidgetTester tester) async { await tester.pumpWidget(const MaterialApp(home: Center(child: Text('Test')))); - final Size windowCenter = tester.binding.window.physicalSize / - tester.binding.window.devicePixelRatio / + final Size windowCenter = tester.view.physicalSize / + tester.view.devicePixelRatio / 2; final double windowCenterX = windowCenter.width; final double windowCenterY = windowCenter.height; diff --git a/packages/flutter_test/test/widget_tester_live_device_test.dart b/packages/flutter_test/test/widget_tester_live_device_test.dart index 070fbcf9e6..d2935cdd0e 100644 --- a/packages/flutter_test/test/widget_tester_live_device_test.dart +++ b/packages/flutter_test/test/widget_tester_live_device_test.dart @@ -34,8 +34,8 @@ void main() { ), ); - final Size windowCenter = tester.binding.window.physicalSize / - tester.binding.window.devicePixelRatio / + final Size windowCenter = tester.view.physicalSize / + tester.view.devicePixelRatio / 2; final double windowCenterX = windowCenter.width; final double windowCenterY = windowCenter.height; diff --git a/packages/integration_test/lib/integration_test.dart b/packages/integration_test/lib/integration_test.dart index f1df051bc3..75ee5b3aa4 100644 --- a/packages/integration_test/lib/integration_test.dart +++ b/packages/integration_test/lib/integration_test.dart @@ -118,11 +118,12 @@ https://flutter.dev/docs/testing/integration-tests#testing-on-firebase-test-lab @override ViewConfiguration createViewConfiguration() { - final double devicePixelRatio = window.devicePixelRatio; - final Size size = _surfaceSize ?? window.physicalSize / devicePixelRatio; + final FlutterView view = platformDispatcher.implicitView!; + final double devicePixelRatio = view.devicePixelRatio; + final Size size = _surfaceSize ?? view.physicalSize / devicePixelRatio; return TestViewConfiguration.fromView( size: size, - view: window, + view: view, ); }