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

Commit db011bb

Browse files
authored
[web] clean-up dom_renderer.dart (#29934)
1 parent 4811ef6 commit db011bb

File tree

10 files changed

+23
-126
lines changed

10 files changed

+23
-126
lines changed

lib/web_ui/lib/src/engine/dom_renderer.dart

Lines changed: 5 additions & 57 deletions
Original file line numberDiff line numberDiff line change
@@ -152,7 +152,7 @@ class DomRenderer {
152152
if (sceneElement != _sceneElement) {
153153
_sceneElement?.remove();
154154
_sceneElement = sceneElement;
155-
append(_sceneHostElement!, sceneElement!);
155+
_sceneHostElement!.append(sceneElement!);
156156
}
157157
assert(() {
158158
_clearOnHotRestart();
@@ -175,40 +175,16 @@ class DomRenderer {
175175

176176
final html.Element rootElement = html.document.body!;
177177

178-
void addElementClass(html.Element element, String className) {
179-
element.classes.add(className);
180-
}
181-
182178
html.Element createElement(String tagName, {html.Element? parent}) {
183179
final html.Element element = html.document.createElement(tagName);
184180
parent?.append(element);
185181
return element;
186182
}
187183

188-
void append(html.Element parent, html.Element child) {
189-
parent.append(child);
190-
}
191-
192184
void appendText(html.Element parent, String text) {
193185
parent.appendText(text);
194186
}
195187

196-
void detachElement(html.Element element) {
197-
element.remove();
198-
}
199-
200-
void removeElementClass(html.Element element, String className) {
201-
element.classes.remove(className);
202-
}
203-
204-
void setElementAttribute(html.Element element, String name, String value) {
205-
element.setAttribute(name, value);
206-
}
207-
208-
void setElementProperty(html.Element element, String name, Object value) {
209-
js_util.setProperty(element, name, value);
210-
}
211-
212188
static void setElementStyle(
213189
html.Element element, String name, String? value) {
214190
if (value == null) {
@@ -233,29 +209,6 @@ class DomRenderer {
233209
}
234210
}
235211

236-
static void setElementTransform(html.Element element, String transformValue) {
237-
js_util.setProperty(
238-
// ignore: implicit_dynamic_function
239-
js_util.getProperty(element, 'style') as Object,
240-
'transform',
241-
transformValue,
242-
);
243-
}
244-
245-
void setText(html.Element element, String text) {
246-
element.text = text;
247-
}
248-
249-
void removeAllChildren(html.Element element) {
250-
element.children.clear();
251-
}
252-
253-
html.Element? getParent(html.Element element) => element.parent;
254-
255-
void setTitle(String title) {
256-
html.document.title = title;
257-
}
258-
259212
void setThemeColor(ui.Color color) {
260213
html.MetaElement? theme =
261214
html.document.querySelector('#flutterweb-theme') as html.MetaElement?;
@@ -292,12 +245,11 @@ class DomRenderer {
292245

293246
final html.BodyElement bodyElement = html.document.body!;
294247

295-
setElementAttribute(
296-
bodyElement,
248+
bodyElement.setAttribute(
297249
'flt-renderer',
298250
'${useCanvasKit ? 'canvaskit' : 'html'} (${FlutterConfiguration.flutterWebAutoDetect ? 'auto-selected' : 'requested explicitly'})',
299251
);
300-
setElementAttribute(bodyElement, 'flt-build-mode', buildMode);
252+
bodyElement.setAttribute('flt-build-mode', buildMode);
301253

302254
setElementStyle(bodyElement, 'position', 'fixed');
303255
setElementStyle(bodyElement, 'top', '0');
@@ -412,7 +364,7 @@ class DomRenderer {
412364
// Hide the DOM nodes used to render the scene from accessibility, because
413365
// the accessibility tree is built from the SemanticsNode tree as a parallel
414366
// DOM tree.
415-
setElementAttribute(_sceneHostElement!, 'aria-hidden', 'true');
367+
_sceneHostElement!.setAttribute('aria-hidden', 'true');
416368

417369
if (html.window.visualViewport == null && isWebKit) {
418370
// Older Safari versions sometimes give us bogus innerWidth/innerHeight
@@ -504,12 +456,8 @@ class DomRenderer {
504456
}
505457
}
506458

507-
void focus(html.Element element) {
508-
element.focus();
509-
}
510-
511459
/// Removes all children of a DOM node.
512-
void clearDom(html.Node node) {
460+
void removeAllChildren(html.Node node) {
513461
while (node.lastChild != null) {
514462
node.lastChild!.remove();
515463
}

lib/web_ui/lib/src/engine/html/bitmap_canvas.dart

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@ import '../browser_detection.dart';
1212
import '../canvas_pool.dart';
1313
import '../canvaskit/color_filter.dart';
1414
import '../color_filter.dart';
15-
import '../dom_renderer.dart';
1615
import '../engine_canvas.dart';
1716
import '../frame_reference.dart';
1817
import '../html_image_codec.dart';
@@ -1354,7 +1353,7 @@ List<html.Element> _clipContent(List<SaveClipEntry> clipStack,
13541353
if (root == null) {
13551354
root = newElement;
13561355
} else {
1357-
domRenderer.append(curElement!, newElement);
1356+
curElement!.append(newElement);
13581357
}
13591358
curElement = newElement;
13601359
final ui.Rect? rect = entry.rect;
@@ -1434,7 +1433,7 @@ List<html.Element> _clipContent(List<SaveClipEntry> clipStack,
14341433
}
14351434

14361435
root!.style.position = 'absolute';
1437-
domRenderer.append(curElement!, content);
1436+
curElement!.append(content);
14381437
setElementTransform(
14391438
content,
14401439
transformWithOffset(currentTransform, offset).storage,

lib/web_ui/lib/src/engine/html/clip.dart

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -361,7 +361,7 @@ class PersistedPhysicalShape extends PersistedContainerSurface
361361
_clipElement?.remove();
362362
_svgElement?.remove();
363363
_clipElement = svgClipPath;
364-
domRenderer.append(rootElement!, _clipElement!);
364+
rootElement!.append(_clipElement!);
365365
if (elevation == 0.0) {
366366
DomRenderer.setClipPath(rootElement!, createSvgClipUrl());
367367
final html.CssStyleDeclaration rootElementStyle = rootElement!.style;
@@ -444,7 +444,7 @@ class PersistedPhysicalShape extends PersistedContainerSurface
444444
// Reuse clipElement from prior surface.
445445
_clipElement = oldSurface._clipElement;
446446
if (_clipElement != null) {
447-
domRenderer.append(rootElement!, _clipElement!);
447+
rootElement!.append(_clipElement!);
448448
}
449449
oldSurface._clipElement = null;
450450
_svgElement = oldSurface._svgElement;
@@ -486,7 +486,7 @@ class PersistedClipPath extends PersistedContainerSurface
486486
void apply() {
487487
_clipElement?.remove();
488488
_clipElement = createSvgClipDef(childContainer! as html.HtmlElement, clipPath);
489-
domRenderer.append(childContainer!, _clipElement!);
489+
childContainer!.append(_clipElement!);
490490
}
491491

492492
@override

lib/web_ui/lib/src/engine/html/dom_canvas.dart

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,8 +32,7 @@ class DomCanvas extends EngineCanvas with SaveElementStackTracking {
3232
@override
3333
void clear() {
3434
super.clear();
35-
// TODO(yjbanov): we should measure if reusing old elements is beneficial.
36-
domRenderer.clearDom(rootElement);
35+
domRenderer.removeAllChildren(rootElement);
3736
}
3837

3938
@override

lib/web_ui/lib/src/engine/html/offset.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ class PersistedOffset extends PersistedContainerSurface
4949

5050
@override
5151
void apply() {
52-
DomRenderer.setElementTransform(rootElement!, 'translate(${dx}px, ${dy}px)');
52+
rootElement!.style.transform = 'translate(${dx}px, ${dy}px)';
5353
}
5454

5555
@override

lib/web_ui/lib/src/engine/html/opacity.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ class PersistedOpacity extends PersistedContainerSurface
5353
void apply() {
5454
final html.Element element = rootElement!;
5555
DomRenderer.setElementStyle(element, 'opacity', '${alpha / 255}');
56-
DomRenderer.setElementTransform(element, 'translate(${offset.dx}px, ${offset.dy}px)');
56+
element.style.transform = 'translate(${offset.dx}px, ${offset.dy}px)';
5757
}
5858

5959
@override

lib/web_ui/lib/src/engine/html/picture.dart

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -350,7 +350,7 @@ class PersistedPicture extends PersistedLeafSurface {
350350
oldSurface._canvas = null;
351351
}
352352
if (rootElement != null) {
353-
domRenderer.clearDom(rootElement!);
353+
domRenderer.removeAllChildren(rootElement!);
354354
}
355355
if (_canvas != null && _canvas != oldCanvas) {
356356
_recycleCanvas(_canvas);
@@ -432,7 +432,7 @@ class PersistedPicture extends PersistedLeafSurface {
432432
_recycleCanvas(_canvas);
433433
final DomCanvas domCanvas = DomCanvas(rootElement!);
434434
_canvas = domCanvas;
435-
domRenderer.clearDom(rootElement!);
435+
domRenderer.removeAllChildren(rootElement!);
436436
picture.recordingCanvas!.apply(domCanvas, _optimalLocalCullRect!);
437437
}
438438

@@ -473,7 +473,7 @@ class PersistedPicture extends PersistedLeafSurface {
473473
surfaceStatsFor(this).paintPixelCount +=
474474
bitmapCanvas.bitmapPixelCount;
475475
}
476-
domRenderer.clearDom(rootElement!);
476+
domRenderer.removeAllChildren(rootElement!);
477477
rootElement!.append(bitmapCanvas.rootElement);
478478
bitmapCanvas.clear();
479479
picture.recordingCanvas!.apply(bitmapCanvas, _optimalLocalCullRect!);

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -428,7 +428,7 @@ class EnginePlatformDispatcher extends ui.PlatformDispatcher {
428428
// TODO(ferhat): Find more appropriate defaults? Or noop when values are null?
429429
final String label = arguments['label'] as String? ?? '';
430430
final int primaryColor = arguments['primaryColor'] as int? ?? 0xFF000000;
431-
domRenderer.setTitle(label);
431+
html.document.title = label;
432432
domRenderer.setThemeColor(ui.Color(primaryColor));
433433
replyToPlatformMessage(callback, codec.encodeSuccessEnvelope(true));
434434
return;

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

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -181,7 +181,7 @@ class CanvasParagraph implements EngineParagraph {
181181
for (int i = 0; i < lines.length; i++) {
182182
// Insert a <BR> element before each line except the first line.
183183
if (i > 0) {
184-
domRenderer.append(element, domRenderer.createElement('br'));
184+
element.append(domRenderer.createElement('br'));
185185
}
186186

187187
final EngineLineMetrics line = lines[i];
@@ -209,15 +209,14 @@ class CanvasParagraph implements EngineParagraph {
209209
style: box.span.style,
210210
isSpan: true,
211211
);
212-
domRenderer.append(rootElement, element);
212+
rootElement.append(element);
213213
buffer.write(box.toText());
214214
} else if (box is PlaceholderBox) {
215215
span = null;
216216
// If there's a line-end after this placeholder, we want the <BR> to
217217
// be inserted in the root paragraph element.
218218
element = rootElement;
219-
domRenderer.append(
220-
rootElement,
219+
rootElement.append(
221220
createPlaceholderElement(placeholder: box.placeholder),
222221
);
223222
} else {

lib/web_ui/test/dom_renderer_test.dart

Lines changed: 3 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -29,46 +29,6 @@ void testMain() {
2929
expect(element, isNotNull);
3030
});
3131

32-
test('can append children to parents', () {
33-
final DomRenderer renderer = DomRenderer();
34-
final html.Element parent = renderer.createElement('div');
35-
final html.Element child = renderer.createElement('div');
36-
renderer.append(parent, child);
37-
expect(parent.children, hasLength(1));
38-
});
39-
40-
test('can set text on elements', () {
41-
final DomRenderer renderer = DomRenderer();
42-
final html.Element element = renderer.createElement('div');
43-
renderer.setText(element, 'Hello World');
44-
expect(element.text, 'Hello World');
45-
});
46-
47-
test('can set attributes on elements', () {
48-
final DomRenderer renderer = DomRenderer();
49-
final html.Element element = renderer.createElement('div');
50-
renderer.setElementAttribute(element, 'id', 'foo');
51-
expect(element.id, 'foo');
52-
});
53-
54-
test('can add classes to elements', () {
55-
final DomRenderer renderer = DomRenderer();
56-
final html.Element element = renderer.createElement('div');
57-
renderer.addElementClass(element, 'foo');
58-
renderer.addElementClass(element, 'bar');
59-
expect(element.classes, <String>['foo', 'bar']);
60-
});
61-
62-
test('can remove classes from elements', () {
63-
final DomRenderer renderer = DomRenderer();
64-
final html.Element element = renderer.createElement('div');
65-
renderer.addElementClass(element, 'foo');
66-
renderer.addElementClass(element, 'bar');
67-
expect(element.classes, <String>['foo', 'bar']);
68-
renderer.removeElementClass(element, 'foo');
69-
expect(element.classes, <String>['bar']);
70-
});
71-
7232
test('can set style properties on elements', () {
7333
final DomRenderer renderer = DomRenderer();
7434
final html.Element element = renderer.createElement('div');
@@ -92,14 +52,6 @@ void testMain() {
9252
expect(element.children, hasLength(1));
9353
});
9454

95-
test('can detach elements', () {
96-
final DomRenderer renderer = DomRenderer();
97-
final html.Element element = renderer.createElement('div');
98-
final html.Element child = renderer.createElement('div', parent: element);
99-
renderer.detachElement(child);
100-
expect(element.children, isEmpty);
101-
});
102-
10355
test('innerHeight/innerWidth are equal to visualViewport height and width',
10456
() {
10557
if (html.window.visualViewport != null) {
@@ -176,17 +128,17 @@ void testMain() {
176128
regularTextField.placeholder = 'Now you see me';
177129
renderer.addResource(regularTextField);
178130

179-
renderer.focus(regularTextField);
131+
regularTextField.focus();
180132
html.CssStyleDeclaration? style = renderer.glassPaneShadow?.querySelector('input')?.getComputedStyle('::placeholder');
181133
expect(style, isNotNull);
182134
expect(style?.opacity, isNot('0'));
183135

184136
final html.InputElement textField = html.InputElement();
185137
textField.placeholder = 'Now you dont';
186-
renderer.addElementClass(textField, 'flt-text-editing');
138+
textField.classes.add('flt-text-editing');
187139
renderer.addResource(textField);
188140

189-
renderer.focus(textField);
141+
textField.focus();
190142
style = renderer.glassPaneShadow?.querySelector('input.flt-text-editing')?.getComputedStyle('::placeholder');
191143
expect(style, isNotNull);
192144
expect(style?.opacity, '0');

0 commit comments

Comments
 (0)