From fa54c5c7f898ebdda1acc20a7212c3ef22ed435d Mon Sep 17 00:00:00 2001 From: Mouad Debbar Date: Wed, 8 Nov 2023 09:57:11 -0500 Subject: [PATCH 1/3] [web] Non-singleton implementation of ui.FlutterView --- .../lib/src/engine/platform_dispatcher.dart | 15 +- lib/web_ui/lib/src/engine/window.dart | 221 ++++++++++-------- 2 files changed, 125 insertions(+), 111 deletions(-) diff --git a/lib/web_ui/lib/src/engine/platform_dispatcher.dart b/lib/web_ui/lib/src/engine/platform_dispatcher.dart index 5d667c51ccf28..0628301b416ec 100644 --- a/lib/web_ui/lib/src/engine/platform_dispatcher.dart +++ b/lib/web_ui/lib/src/engine/platform_dispatcher.dart @@ -130,24 +130,21 @@ class EnginePlatformDispatcher extends ui.PlatformDispatcher { EngineFlutterDisplay.instance, ]; + /// Adds [view] to the platform dispatcher's registry of [views]. + void registerView(EngineFlutterView view) { + viewData[view.viewId] = view; + } + /// The current list of windows. @override Iterable get views => viewData.values; final Map viewData = {}; - /// Returns the [FlutterView] with the provided ID if one exists, or null + /// Returns the [EngineFlutterView] with the provided ID if one exists, or null /// otherwise. @override EngineFlutterView? view({required int id}) => viewData[id]; - /// A map of opaque platform window identifiers to window configurations. - /// - /// This should be considered a protected member, only to be used by - /// [PlatformDispatcher] subclasses. - Map get windowConfigurations => _windowConfigurations; - final Map _windowConfigurations = - {}; - /// The [FlutterView] provided by the engine if the platform is unable to /// create windows, or, for backwards compatibility. /// diff --git a/lib/web_ui/lib/src/engine/window.dart b/lib/web_ui/lib/src/engine/window.dart index f3c5e9b2b87db..966ee1882a0f7 100644 --- a/lib/web_ui/lib/src/engine/window.dart +++ b/lib/web_ui/lib/src/engine/window.dart @@ -38,18 +38,129 @@ const int kImplicitViewId = 0; /// /// In addition to everything defined in [ui.FlutterView], this class adds /// a few web-specific properties. -abstract interface class EngineFlutterView extends ui.FlutterView { - ContextMenu get contextMenu; - DomManager get dom; - MouseCursor get mouseCursor; - PlatformViewMessageHandler get platformViewMessageHandler; +abstract mixin class EngineFlutterView implements ui.FlutterView { + factory EngineFlutterView( + int viewId, + EnginePlatformDispatcher platformDispatcher, + ) = _EngineFlutterViewImpl; + + @override + EnginePlatformDispatcher get platformDispatcher; + + final ViewConfiguration _viewConfiguration = const ViewConfiguration(); + + @override + void render(ui.Scene scene) => platformDispatcher.render(scene, this); + + @override + void updateSemantics(ui.SemanticsUpdate update) => platformDispatcher.updateSemantics(update); + + late final MouseCursor mouseCursor = MouseCursor(dom.rootElement); + + late final ContextMenu contextMenu = ContextMenu(dom.rootElement); + + late final DomManager dom = + DomManager.fromFlutterViewEmbedderDEPRECATED(flutterViewEmbedder); + + late final PlatformViewMessageHandler platformViewMessageHandler = + PlatformViewMessageHandler(platformViewsContainer: dom.platformViewsHost); + + @override + ui.Rect get physicalGeometry => _viewConfiguration.geometry; + + @override + ui.Size get physicalSize { + if (_physicalSize == null) { + computePhysicalSize(); + } + assert(_physicalSize != null); + return _physicalSize!; + } + + /// Lazily populated and cleared at the end of the frame. + ui.Size? _physicalSize; + + ui.Size? debugPhysicalSizeOverride; + + /// Computes the physical size of the screen from [domWindow]. + /// + /// This function is expensive. It triggers browser layout if there are + /// pending DOM writes. + void computePhysicalSize() { + bool override = false; + + assert(() { + if (debugPhysicalSizeOverride != null) { + _physicalSize = debugPhysicalSizeOverride; + override = true; + } + return true; + }()); + + if (!override) { + _physicalSize = _dimensionsProvider.computePhysicalSize(); + } + } + + /// Forces the view to recompute its physical size. Useful for tests. + void debugForceResize() { + computePhysicalSize(); + } + + @override + ViewPadding get viewInsets => _viewInsets; + ViewPadding _viewInsets = ui.ViewPadding.zero as ViewPadding; + + @override + ViewPadding get viewPadding => _viewConfiguration.viewPadding; + + @override + ViewPadding get systemGestureInsets => _viewConfiguration.systemGestureInsets; + + @override + ViewPadding get padding => _viewConfiguration.padding; + + @override + ui.GestureSettings get gestureSettings => _viewConfiguration.gestureSettings; + + @override + List get displayFeatures => _viewConfiguration.displayFeatures; + + @override + EngineFlutterDisplay get display => EngineFlutterDisplay.instance; + + @override + double get devicePixelRatio => display.devicePixelRatio; + + late DimensionsProvider _dimensionsProvider; + void configureDimensionsProvider(DimensionsProvider dimensionsProvider) { + _dimensionsProvider = dimensionsProvider; + } + + Stream get onResize => _dimensionsProvider.onResize; +} + +class _EngineFlutterViewImpl extends ui.FlutterView with EngineFlutterView { + _EngineFlutterViewImpl(this.viewId, this.platformDispatcher) { + platformDispatcher.registerView(this); + registerHotRestartListener(() { + // TODO(harryterkelsen): What should we do about this in multi-view? + renderer.clearFragmentProgramCache(); + _dimensionsProvider.close(); + }); + } + + @override + final int viewId; + + @override + final EnginePlatformDispatcher platformDispatcher; } /// The Web implementation of [ui.SingletonFlutterWindow]. -class EngineFlutterWindow extends ui.SingletonFlutterWindow implements EngineFlutterView { +class EngineFlutterWindow extends ui.SingletonFlutterWindow with EngineFlutterView { EngineFlutterWindow(this.viewId, this.platformDispatcher) { - platformDispatcher.viewData[viewId] = this; - platformDispatcher.windowConfigurations[viewId] = const ViewConfiguration(); + platformDispatcher.registerView(this); if (ui_web.isCustomUrlStrategySet) { _browserHistory = createHistoryForExistingState(ui_web.urlStrategy); } @@ -60,29 +171,12 @@ class EngineFlutterWindow extends ui.SingletonFlutterWindow implements EngineFlu }); } - @override - EngineFlutterDisplay get display => EngineFlutterDisplay.instance; - @override final int viewId; @override final EnginePlatformDispatcher platformDispatcher; - @override - late final MouseCursor mouseCursor = MouseCursor(dom.rootElement); - - @override - late final ContextMenu contextMenu = ContextMenu(dom.rootElement); - - @override - late final DomManager dom = - DomManager.fromFlutterViewEmbedderDEPRECATED(flutterViewEmbedder); - - @override - late final PlatformViewMessageHandler platformViewMessageHandler = - PlatformViewMessageHandler(platformViewsContainer: dom.platformViewsHost); - /// Handles the browser history integration to allow users to use the back /// button, etc. BrowserHistory get browserHistory { @@ -229,38 +323,6 @@ class EngineFlutterWindow extends ui.SingletonFlutterWindow implements EngineFlu }); } - ViewConfiguration get _viewConfiguration { - assert(platformDispatcher.windowConfigurations.containsKey(viewId)); - return platformDispatcher.windowConfigurations[viewId] ?? - const ViewConfiguration(); - } - - @override - ui.Rect get physicalGeometry => _viewConfiguration.geometry; - - @override - ViewPadding get viewPadding => _viewConfiguration.viewPadding; - - @override - ViewPadding get systemGestureInsets => _viewConfiguration.systemGestureInsets; - - @override - ViewPadding get padding => _viewConfiguration.padding; - - @override - ui.GestureSettings get gestureSettings => _viewConfiguration.gestureSettings; - - @override - List get displayFeatures => _viewConfiguration.displayFeatures; - - late DimensionsProvider _dimensionsProvider; - void configureDimensionsProvider(DimensionsProvider dimensionsProvider) { - _dimensionsProvider = dimensionsProvider; - } - - @override - double get devicePixelRatio => display.devicePixelRatio; - // TODO(mdebbar): Deprecate this and remove it. // https://github.com/flutter/flutter/issues/127395 void debugOverrideDevicePixelRatio(double? value) { @@ -275,42 +337,6 @@ class EngineFlutterWindow extends ui.SingletonFlutterWindow implements EngineFlu display.debugOverrideDevicePixelRatio(value); } - Stream get onResize => _dimensionsProvider.onResize; - - @override - ui.Size get physicalSize { - if (_physicalSize == null) { - computePhysicalSize(); - } - assert(_physicalSize != null); - return _physicalSize!; - } - - /// Computes the physical size of the screen from [domWindow]. - /// - /// This function is expensive. It triggers browser layout if there are - /// pending DOM writes. - void computePhysicalSize() { - bool override = false; - - assert(() { - if (debugPhysicalSizeOverride != null) { - _physicalSize = debugPhysicalSizeOverride; - override = true; - } - return true; - }()); - - if (!override) { - _physicalSize = _dimensionsProvider.computePhysicalSize(); - } - } - - /// Forces the window to recompute its physical size. Useful for tests. - void debugForceResize() { - computePhysicalSize(); - } - void computeOnScreenKeyboardInsets(bool isEditingOnMobile) { _viewInsets = _dimensionsProvider.computeKeyboardInsets( _physicalSize!.height, @@ -351,13 +377,6 @@ class EngineFlutterWindow extends ui.SingletonFlutterWindow implements EngineFlu return false; } - @override - ViewPadding get viewInsets => _viewInsets; - ViewPadding _viewInsets = ui.ViewPadding.zero as ViewPadding; - - /// Lazily populated and cleared at the end of the frame. - ui.Size? _physicalSize; - // TODO(mdebbar): Deprecate this and remove it. // https://github.com/flutter/flutter/issues/127395 ui.Size? get webOnlyDebugPhysicalSizeOverride { @@ -387,8 +406,6 @@ class EngineFlutterWindow extends ui.SingletonFlutterWindow implements EngineFlu }()); debugPhysicalSizeOverride = value; } - - ui.Size? debugPhysicalSizeOverride; } /// The window singleton. From d69cab804435c320a02eeafc7597f7502e126e8f Mon Sep 17 00:00:00 2001 From: Mouad Debbar Date: Wed, 8 Nov 2023 17:42:19 -0500 Subject: [PATCH 2/3] simpler type hierarchy --- lib/web_ui/lib/src/engine/window.dart | 185 ++++++++++++++++++++++++-- lib/web_ui/lib/window.dart | 124 +++++++---------- 2 files changed, 216 insertions(+), 93 deletions(-) diff --git a/lib/web_ui/lib/src/engine/window.dart b/lib/web_ui/lib/src/engine/window.dart index 966ee1882a0f7..3bc1fed157269 100644 --- a/lib/web_ui/lib/src/engine/window.dart +++ b/lib/web_ui/lib/src/engine/window.dart @@ -38,14 +38,22 @@ const int kImplicitViewId = 0; /// /// In addition to everything defined in [ui.FlutterView], this class adds /// a few web-specific properties. -abstract mixin class EngineFlutterView implements ui.FlutterView { +base class EngineFlutterView implements ui.FlutterView { factory EngineFlutterView( int viewId, EnginePlatformDispatcher platformDispatcher, ) = _EngineFlutterViewImpl; + EngineFlutterView._( + this.viewId, + this.platformDispatcher, + ); + @override - EnginePlatformDispatcher get platformDispatcher; + final int viewId; + + @override + final EnginePlatformDispatcher platformDispatcher; final ViewConfiguration _viewConfiguration = const ViewConfiguration(); @@ -140,8 +148,11 @@ abstract mixin class EngineFlutterView implements ui.FlutterView { Stream get onResize => _dimensionsProvider.onResize; } -class _EngineFlutterViewImpl extends ui.FlutterView with EngineFlutterView { - _EngineFlutterViewImpl(this.viewId, this.platformDispatcher) { +final class _EngineFlutterViewImpl extends EngineFlutterView { + _EngineFlutterViewImpl( + int viewId, + EnginePlatformDispatcher platformDispatcher, + ) : super._(viewId, platformDispatcher) { platformDispatcher.registerView(this); registerHotRestartListener(() { // TODO(harryterkelsen): What should we do about this in multi-view? @@ -149,17 +160,14 @@ class _EngineFlutterViewImpl extends ui.FlutterView with EngineFlutterView { _dimensionsProvider.close(); }); } - - @override - final int viewId; - - @override - final EnginePlatformDispatcher platformDispatcher; } /// The Web implementation of [ui.SingletonFlutterWindow]. -class EngineFlutterWindow extends ui.SingletonFlutterWindow with EngineFlutterView { - EngineFlutterWindow(this.viewId, this.platformDispatcher) { +final class EngineFlutterWindow extends EngineFlutterView implements ui.SingletonFlutterWindow { + EngineFlutterWindow( + int viewId, + EnginePlatformDispatcher platformDispatcher, + ) : super._(viewId, platformDispatcher) { platformDispatcher.registerView(this); if (ui_web.isCustomUrlStrategySet) { _browserHistory = createHistoryForExistingState(ui_web.urlStrategy); @@ -172,10 +180,159 @@ class EngineFlutterWindow extends ui.SingletonFlutterWindow with EngineFlutterVi } @override - final int viewId; + ui.VoidCallback? get onMetricsChanged => platformDispatcher.onMetricsChanged; + @override + set onMetricsChanged(ui.VoidCallback? callback) { + platformDispatcher.onMetricsChanged = callback; + } @override - final EnginePlatformDispatcher platformDispatcher; + ui.Locale get locale => platformDispatcher.locale; + @override + List get locales => platformDispatcher.locales; + + @override + ui.Locale? computePlatformResolvedLocale(List supportedLocales) { + return platformDispatcher.computePlatformResolvedLocale(supportedLocales); + } + + @override + ui.VoidCallback? get onLocaleChanged => platformDispatcher.onLocaleChanged; + @override + set onLocaleChanged(ui.VoidCallback? callback) { + platformDispatcher.onLocaleChanged = callback; + } + + @override + String get initialLifecycleState => platformDispatcher.initialLifecycleState; + + @override + double get textScaleFactor => platformDispatcher.textScaleFactor; + + @override + bool get nativeSpellCheckServiceDefined => platformDispatcher.nativeSpellCheckServiceDefined; + + @override + bool get brieflyShowPassword => platformDispatcher.brieflyShowPassword; + + @override + bool get alwaysUse24HourFormat => platformDispatcher.alwaysUse24HourFormat; + + @override + ui.VoidCallback? get onTextScaleFactorChanged => platformDispatcher.onTextScaleFactorChanged; + @override + set onTextScaleFactorChanged(ui.VoidCallback? callback) { + platformDispatcher.onTextScaleFactorChanged = callback; + } + + @override + ui.Brightness get platformBrightness => platformDispatcher.platformBrightness; + + @override + ui.VoidCallback? get onPlatformBrightnessChanged => platformDispatcher.onPlatformBrightnessChanged; + @override + set onPlatformBrightnessChanged(ui.VoidCallback? callback) { + platformDispatcher.onPlatformBrightnessChanged = callback; + } + + @override + String? get systemFontFamily => platformDispatcher.systemFontFamily; + + @override + ui.VoidCallback? get onSystemFontFamilyChanged => platformDispatcher.onSystemFontFamilyChanged; + @override + set onSystemFontFamilyChanged(ui.VoidCallback? callback) { + platformDispatcher.onSystemFontFamilyChanged = callback; + } + + @override + ui.FrameCallback? get onBeginFrame => platformDispatcher.onBeginFrame; + @override + set onBeginFrame(ui.FrameCallback? callback) { + platformDispatcher.onBeginFrame = callback; + } + + @override + ui.VoidCallback? get onDrawFrame => platformDispatcher.onDrawFrame; + @override + set onDrawFrame(ui.VoidCallback? callback) { + platformDispatcher.onDrawFrame = callback; + } + + @override + ui.TimingsCallback? get onReportTimings => platformDispatcher.onReportTimings; + @override + set onReportTimings(ui.TimingsCallback? callback) { + platformDispatcher.onReportTimings = callback; + } + + @override + ui.PointerDataPacketCallback? get onPointerDataPacket => platformDispatcher.onPointerDataPacket; + @override + set onPointerDataPacket(ui.PointerDataPacketCallback? callback) { + platformDispatcher.onPointerDataPacket = callback; + } + + @override + ui.KeyDataCallback? get onKeyData => platformDispatcher.onKeyData; + @override + set onKeyData(ui.KeyDataCallback? callback) { + platformDispatcher.onKeyData = callback; + } + + @override + String get defaultRouteName => platformDispatcher.defaultRouteName; + + @override + void scheduleFrame() => platformDispatcher.scheduleFrame(); + + @override + bool get semanticsEnabled => platformDispatcher.semanticsEnabled; + + @override + ui.VoidCallback? get onSemanticsEnabledChanged => platformDispatcher.onSemanticsEnabledChanged; + @override + set onSemanticsEnabledChanged(ui.VoidCallback? callback) { + platformDispatcher.onSemanticsEnabledChanged = callback; + } + + @override + ui.FrameData get frameData => const ui.FrameData.webOnly(); + + @override + ui.VoidCallback? get onFrameDataChanged => null; + @override + set onFrameDataChanged(ui.VoidCallback? callback) {} + + @override + ui.AccessibilityFeatures get accessibilityFeatures => platformDispatcher.accessibilityFeatures; + + @override + ui.VoidCallback? get onAccessibilityFeaturesChanged => + platformDispatcher.onAccessibilityFeaturesChanged; + @override + set onAccessibilityFeaturesChanged(ui.VoidCallback? callback) { + platformDispatcher.onAccessibilityFeaturesChanged = callback; + } + + @override + void sendPlatformMessage( + String name, + ByteData? data, + ui.PlatformMessageResponseCallback? callback, + ) { + platformDispatcher.sendPlatformMessage(name, data, callback); + } + + @override + ui.PlatformMessageCallback? get onPlatformMessage => platformDispatcher.onPlatformMessage; + @override + set onPlatformMessage(ui.PlatformMessageCallback? callback) { + platformDispatcher.onPlatformMessage = callback; + } + + @override + void setIsolateDebugName(String name) => ui.PlatformDispatcher.instance.setIsolateDebugName(name); /// Handles the browser history integration to allow users to use the back /// button, etc. diff --git a/lib/web_ui/lib/window.dart b/lib/web_ui/lib/window.dart index 3e31bbc03f025..14b38ad7ddf70 100644 --- a/lib/web_ui/lib/window.dart +++ b/lib/web_ui/lib/window.dart @@ -29,118 +29,84 @@ abstract class FlutterView { } abstract class SingletonFlutterWindow extends FlutterView { - VoidCallback? get onMetricsChanged => platformDispatcher.onMetricsChanged; - set onMetricsChanged(VoidCallback? callback) { - platformDispatcher.onMetricsChanged = callback; - } + VoidCallback? get onMetricsChanged; + set onMetricsChanged(VoidCallback? callback); - Locale get locale => platformDispatcher.locale; - List get locales => platformDispatcher.locales; + Locale get locale; + List get locales; - Locale? computePlatformResolvedLocale(List supportedLocales) { - return platformDispatcher.computePlatformResolvedLocale(supportedLocales); - } + Locale? computePlatformResolvedLocale(List supportedLocales); - VoidCallback? get onLocaleChanged => platformDispatcher.onLocaleChanged; - set onLocaleChanged(VoidCallback? callback) { - platformDispatcher.onLocaleChanged = callback; - } + VoidCallback? get onLocaleChanged; + set onLocaleChanged(VoidCallback? callback); - String get initialLifecycleState => platformDispatcher.initialLifecycleState; + String get initialLifecycleState; - double get textScaleFactor => platformDispatcher.textScaleFactor; + double get textScaleFactor; - bool get nativeSpellCheckServiceDefined => platformDispatcher.nativeSpellCheckServiceDefined; + bool get nativeSpellCheckServiceDefined; - bool get brieflyShowPassword => platformDispatcher.brieflyShowPassword; + bool get brieflyShowPassword; - bool get alwaysUse24HourFormat => platformDispatcher.alwaysUse24HourFormat; + bool get alwaysUse24HourFormat; - VoidCallback? get onTextScaleFactorChanged => platformDispatcher.onTextScaleFactorChanged; - set onTextScaleFactorChanged(VoidCallback? callback) { - platformDispatcher.onTextScaleFactorChanged = callback; - } + VoidCallback? get onTextScaleFactorChanged; + set onTextScaleFactorChanged(VoidCallback? callback); - Brightness get platformBrightness => platformDispatcher.platformBrightness; + Brightness get platformBrightness; - VoidCallback? get onPlatformBrightnessChanged => platformDispatcher.onPlatformBrightnessChanged; - set onPlatformBrightnessChanged(VoidCallback? callback) { - platformDispatcher.onPlatformBrightnessChanged = callback; - } + VoidCallback? get onPlatformBrightnessChanged; + set onPlatformBrightnessChanged(VoidCallback? callback); - String? get systemFontFamily => platformDispatcher.systemFontFamily; + String? get systemFontFamily; - VoidCallback? get onSystemFontFamilyChanged => platformDispatcher.onSystemFontFamilyChanged; - set onSystemFontFamilyChanged(VoidCallback? callback) { - platformDispatcher.onSystemFontFamilyChanged = callback; - } - - FrameCallback? get onBeginFrame => platformDispatcher.onBeginFrame; - set onBeginFrame(FrameCallback? callback) { - platformDispatcher.onBeginFrame = callback; - } + VoidCallback? get onSystemFontFamilyChanged; + set onSystemFontFamilyChanged(VoidCallback? callback); - VoidCallback? get onDrawFrame => platformDispatcher.onDrawFrame; - set onDrawFrame(VoidCallback? callback) { - platformDispatcher.onDrawFrame = callback; - } + FrameCallback? get onBeginFrame; + set onBeginFrame(FrameCallback? callback); - TimingsCallback? get onReportTimings => platformDispatcher.onReportTimings; - set onReportTimings(TimingsCallback? callback) { - platformDispatcher.onReportTimings = callback; - } + VoidCallback? get onDrawFrame; + set onDrawFrame(VoidCallback? callback); - PointerDataPacketCallback? get onPointerDataPacket => platformDispatcher.onPointerDataPacket; - set onPointerDataPacket(PointerDataPacketCallback? callback) { - platformDispatcher.onPointerDataPacket = callback; - } + TimingsCallback? get onReportTimings; + set onReportTimings(TimingsCallback? callback); - KeyDataCallback? get onKeyData => platformDispatcher.onKeyData; - set onKeyData(KeyDataCallback? callback) { - platformDispatcher.onKeyData = callback; - } + PointerDataPacketCallback? get onPointerDataPacket; + set onPointerDataPacket(PointerDataPacketCallback? callback); - String get defaultRouteName => platformDispatcher.defaultRouteName; + KeyDataCallback? get onKeyData; + set onKeyData(KeyDataCallback? callback); - void scheduleFrame() => platformDispatcher.scheduleFrame(); + String get defaultRouteName; - @override - void render(Scene scene) => platformDispatcher.render(scene, this); + void scheduleFrame(); - bool get semanticsEnabled => platformDispatcher.semanticsEnabled; + bool get semanticsEnabled; - VoidCallback? get onSemanticsEnabledChanged => platformDispatcher.onSemanticsEnabledChanged; - set onSemanticsEnabledChanged(VoidCallback? callback) { - platformDispatcher.onSemanticsEnabledChanged = callback; - } + VoidCallback? get onSemanticsEnabledChanged; + set onSemanticsEnabledChanged(VoidCallback? callback); - FrameData get frameData => const FrameData._(); + FrameData get frameData; - VoidCallback? get onFrameDataChanged => null; - set onFrameDataChanged(VoidCallback? callback) {} + VoidCallback? get onFrameDataChanged; + set onFrameDataChanged(VoidCallback? callback); - AccessibilityFeatures get accessibilityFeatures => platformDispatcher.accessibilityFeatures; + AccessibilityFeatures get accessibilityFeatures; - VoidCallback? get onAccessibilityFeaturesChanged => - platformDispatcher.onAccessibilityFeaturesChanged; - set onAccessibilityFeaturesChanged(VoidCallback? callback) { - platformDispatcher.onAccessibilityFeaturesChanged = callback; - } + VoidCallback? get onAccessibilityFeaturesChanged; + set onAccessibilityFeaturesChanged(VoidCallback? callback); void sendPlatformMessage( String name, ByteData? data, PlatformMessageResponseCallback? callback, - ) { - platformDispatcher.sendPlatformMessage(name, data, callback); - } + ); - PlatformMessageCallback? get onPlatformMessage => platformDispatcher.onPlatformMessage; - set onPlatformMessage(PlatformMessageCallback? callback) { - platformDispatcher.onPlatformMessage = callback; - } + PlatformMessageCallback? get onPlatformMessage; + set onPlatformMessage(PlatformMessageCallback? callback); - void setIsolateDebugName(String name) => PlatformDispatcher.instance.setIsolateDebugName(name); + void setIsolateDebugName(String name); } abstract class AccessibilityFeatures { From 3199db0128ebb00eebd793c7776450d0b4aa78b8 Mon Sep 17 00:00:00 2001 From: Mouad Debbar Date: Wed, 8 Nov 2023 17:57:53 -0500 Subject: [PATCH 3/3] remove FrameData._() --- lib/web_ui/lib/window.dart | 2 -- 1 file changed, 2 deletions(-) diff --git a/lib/web_ui/lib/window.dart b/lib/web_ui/lib/window.dart index 14b38ad7ddf70..4f5cf61becc69 100644 --- a/lib/web_ui/lib/window.dart +++ b/lib/web_ui/lib/window.dart @@ -169,8 +169,6 @@ abstract final class IsolateNameServer { SingletonFlutterWindow get window => engine.window; class FrameData { - const FrameData._(); - const FrameData.webOnly(); int get frameNumber => -1;