Skip to content
This repository was archived by the owner on Feb 25, 2025. It is now read-only.

Commit e7fde3f

Browse files
authored
[web] Make glassPaneElement and glassPaneShadow non-nullable (#39692)
1 parent 0a27673 commit e7fde3f

File tree

13 files changed

+32
-34
lines changed

13 files changed

+32
-34
lines changed

lib/web_ui/lib/src/engine/embedder.dart

Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -117,12 +117,12 @@ class FlutterViewEmbedder {
117117
/// which captures semantics input events. The semantics DOM tree must be a
118118
/// child of the glass pane element so that events bubble up to the glass pane
119119
/// if they are not handled by semantics.
120-
DomElement? get glassPaneElement => _glassPaneElement;
121-
DomElement? _glassPaneElement;
120+
DomElement get glassPaneElement => _glassPaneElement;
121+
late DomElement _glassPaneElement;
122122

123123
/// The [HostNode] of the [glassPaneElement], which contains the whole Flutter app.
124-
HostNode? get glassPaneShadow => _glassPaneShadow;
125-
HostNode? _glassPaneShadow;
124+
HostNode get glassPaneShadow => _glassPaneShadow;
125+
late HostNode _glassPaneShadow;
126126

127127
static const String defaultFontStyle = 'normal';
128128
static const String defaultFontWeight = 'normal';
@@ -149,9 +149,7 @@ class FlutterViewEmbedder {
149149
);
150150

151151
// Create and inject the [_glassPaneElement].
152-
final DomElement glassPaneElement =
153-
domDocument.createElement(glassPaneTagName);
154-
_glassPaneElement = glassPaneElement;
152+
_glassPaneElement = domDocument.createElement(glassPaneTagName);
155153

156154
// This must be attached to the DOM now, so the engine can create a host
157155
// node (ShadowDOM or a fallback) next.
@@ -340,8 +338,8 @@ class FlutterViewEmbedder {
340338
_embeddingStrategy.attachResourcesHost(resourcesHost,
341339
nextTo: glassPaneElement);
342340
} else {
343-
glassPaneShadow!.node
344-
.insertBefore(resourcesHost, glassPaneShadow!.node.firstChild);
341+
glassPaneShadow.node
342+
.insertBefore(resourcesHost, glassPaneShadow.node.firstChild);
345343
}
346344
_resourcesHost = resourcesHost;
347345
}

lib/web_ui/lib/src/engine/mouse_cursor.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ class MouseCursor {
6767

6868
void activateSystemCursor(String? kind) {
6969
setElementStyle(
70-
flutterViewEmbedder.glassPaneElement!,
70+
flutterViewEmbedder.glassPaneElement,
7171
'cursor',
7272
_mapKindToCssValue(kind),
7373
);

lib/web_ui/lib/src/engine/platform_dispatcher.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -590,7 +590,7 @@ class EnginePlatformDispatcher extends ui.PlatformDispatcher {
590590
_platformViewMessageHandler ??= PlatformViewMessageHandler(
591591
contentManager: platformViewManager,
592592
contentHandler: (DomElement content) {
593-
flutterViewEmbedder.glassPaneElement!.append(content);
593+
flutterViewEmbedder.glassPaneElement.append(content);
594594
},
595595
);
596596
_platformViewMessageHandler!.handlePlatformViewCall(data, callback!);

lib/web_ui/lib/src/engine/platform_views/content_manager.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -161,7 +161,7 @@ class PlatformViewManager {
161161
final DomElement slot = domDocument.createElement('slot')
162162
..style.display = 'none'
163163
..setAttribute('name', tombstoneName);
164-
flutterViewEmbedder.glassPaneShadow!.append(slot);
164+
flutterViewEmbedder.glassPaneShadow.append(slot);
165165
// Link the element to the new slot
166166
element.setAttribute('slot', tombstoneName);
167167
// Delete both the element, and the new slot

lib/web_ui/lib/src/engine/semantics/text_field.dart

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -424,14 +424,14 @@ class TextField extends RoleManager {
424424
..height = '${semanticsObject.rect!.height}px';
425425

426426
if (semanticsObject.hasFocus) {
427-
if (flutterViewEmbedder.glassPaneShadow!.activeElement !=
427+
if (flutterViewEmbedder.glassPaneShadow.activeElement !=
428428
activeEditableElement) {
429429
semanticsObject.owner.addOneTimePostUpdateCallback(() {
430430
activeEditableElement.focus();
431431
});
432432
}
433433
SemanticsTextEditingStrategy.instance.activate(this);
434-
} else if (flutterViewEmbedder.glassPaneShadow!.activeElement ==
434+
} else if (flutterViewEmbedder.glassPaneShadow.activeElement ==
435435
activeEditableElement) {
436436
if (!isIosSafari) {
437437
SemanticsTextEditingStrategy.instance.deactivate(this);

lib/web_ui/lib/src/engine/text/measurement.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ class RulerHost {
2929
..height = '0';
3030

3131
if (root == null) {
32-
flutterViewEmbedder.glassPaneShadow!.node.appendChild(_rulerHost);
32+
flutterViewEmbedder.glassPaneShadow.node.appendChild(_rulerHost);
3333
} else {
3434
root.appendChild(_rulerHost);
3535
}

lib/web_ui/lib/src/engine/text_editing/text_editing.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ void _emptyCallback(dynamic _) {}
5151

5252
/// The default [HostNode] that hosts all DOM required for text editing when a11y is not enabled.
5353
@visibleForTesting
54-
HostNode get defaultTextEditingRoot => flutterViewEmbedder.glassPaneShadow!;
54+
HostNode get defaultTextEditingRoot => flutterViewEmbedder.glassPaneShadow;
5555

5656
/// These style attributes are constant throughout the life time of an input
5757
/// element.

lib/web_ui/test/canvaskit/embedded_views_test.dart

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ void testMain() {
4141
// The platform view is now split in two parts. The contents live
4242
// as a child of the glassPane, and the slot lives in the glassPane
4343
// shadow root. The slot is the one that has pointer events auto.
44-
final DomElement contents = flutterViewEmbedder.glassPaneElement!
44+
final DomElement contents = flutterViewEmbedder.glassPaneElement
4545
.querySelector('#view-0')!;
4646
final DomElement slot = flutterViewEmbedder.sceneElement!
4747
.querySelector('slot')!;
@@ -598,7 +598,7 @@ void testMain() {
598598
]);
599599

600600
expect(
601-
flutterViewEmbedder.glassPaneElement!
601+
flutterViewEmbedder.glassPaneElement
602602
.querySelector('flt-platform-view'),
603603
isNotNull,
604604
);
@@ -614,7 +614,7 @@ void testMain() {
614614
]);
615615

616616
expect(
617-
flutterViewEmbedder.glassPaneElement!
617+
flutterViewEmbedder.glassPaneElement
618618
.querySelector('flt-platform-view'),
619619
isNull,
620620
);
@@ -685,7 +685,7 @@ void testMain() {
685685
]);
686686

687687
expect(
688-
flutterViewEmbedder.glassPaneElement!
688+
flutterViewEmbedder.glassPaneElement
689689
.querySelector('flt-platform-view'),
690690
isNotNull,
691691
);
@@ -703,7 +703,7 @@ void testMain() {
703703
]);
704704

705705
expect(
706-
flutterViewEmbedder.glassPaneElement!
706+
flutterViewEmbedder.glassPaneElement
707707
.querySelectorAll('flt-platform-view'),
708708
hasLength(2));
709709

@@ -719,7 +719,7 @@ void testMain() {
719719
// The actual contents of the platform view are kept in the dom, until
720720
// it's actually disposed of!
721721
expect(
722-
flutterViewEmbedder.glassPaneElement!
722+
flutterViewEmbedder.glassPaneElement
723723
.querySelectorAll('flt-platform-view'),
724724
hasLength(2));
725725
});

lib/web_ui/test/embedder_test.dart

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -46,14 +46,14 @@ void testMain() {
4646
final FlutterViewEmbedder embedder = FlutterViewEmbedder();
4747

4848
expect(
49-
embedder.glassPaneShadow?.querySelectorAll('flt-semantics-placeholder'),
49+
embedder.glassPaneShadow.querySelectorAll('flt-semantics-placeholder'),
5050
isNotEmpty,
5151
);
5252
});
5353

5454
test('renders a shadowRoot by default', () {
5555
final FlutterViewEmbedder embedder = FlutterViewEmbedder();
56-
final HostNode hostNode = embedder.glassPaneShadow!;
56+
final HostNode hostNode = embedder.glassPaneShadow;
5757
expect(domInstanceOfString(hostNode.node, 'ShadowRoot'), isTrue);
5858
});
5959

@@ -64,7 +64,7 @@ void testMain() {
6464
attachShadow = null; // Break ShadowDOM
6565

6666
final FlutterViewEmbedder embedder = FlutterViewEmbedder();
67-
final HostNode hostNode = embedder.glassPaneShadow!;
67+
final HostNode hostNode = embedder.glassPaneShadow;
6868
expect(domInstanceOfString(hostNode.node, 'Element'), isTrue);
6969
expect(
7070
(hostNode.node as DomElement).tagName,
@@ -92,7 +92,7 @@ void testMain() {
9292

9393
regularTextField.focus();
9494
DomCSSStyleDeclaration? style = domWindow.getComputedStyle(
95-
embedder.glassPaneShadow!.querySelector('input')!,
95+
embedder.glassPaneShadow.querySelector('input')!,
9696
'::placeholder');
9797
expect(style, isNotNull);
9898
expect(style.opacity, isNot('0'));
@@ -104,7 +104,7 @@ void testMain() {
104104

105105
textField.focus();
106106
style = domWindow.getComputedStyle(
107-
embedder.glassPaneShadow!.querySelector('input.flt-text-editing')!,
107+
embedder.glassPaneShadow.querySelector('input.flt-text-editing')!,
108108
'::placeholder');
109109
expect(style, isNotNull);
110110
expect(style.opacity, '0');

lib/web_ui/test/engine/pointer_binding_test.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ void main() {
4242

4343
void testMain() {
4444
ensureFlutterViewEmbedderInitialized();
45-
final DomElement glassPane = flutterViewEmbedder.glassPaneElement!;
45+
final DomElement glassPane = flutterViewEmbedder.glassPaneElement;
4646
late double dpi;
4747

4848
setUp(() {

0 commit comments

Comments
 (0)