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

Commit e1589f3

Browse files
committed
Refactor
1 parent d501b2e commit e1589f3

File tree

16 files changed

+210
-123
lines changed

16 files changed

+210
-123
lines changed

lib/web_ui/lib/src/engine.dart

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -143,6 +143,7 @@ export 'engine/semantics/focusable.dart';
143143
export 'engine/semantics/image.dart';
144144
export 'engine/semantics/incrementable.dart';
145145
export 'engine/semantics/label_and_value.dart';
146+
export 'engine/semantics/link.dart';
146147
export 'engine/semantics/live_region.dart';
147148
export 'engine/semantics/platform_view.dart';
148149
export 'engine/semantics/scrollable.dart';

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ export 'semantics/focusable.dart';
88
export 'semantics/image.dart';
99
export 'semantics/incrementable.dart';
1010
export 'semantics/label_and_value.dart';
11+
export 'semantics/link.dart';
1112
export 'semantics/live_region.dart';
1213
export 'semantics/platform_view.dart';
1314
export 'semantics/scrollable.dart';

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

Lines changed: 8 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -63,18 +63,18 @@ class Checkable extends PrimaryRoleManager {
6363
if (semanticsObject.isFlagsDirty) {
6464
switch (_kind) {
6565
case _CheckableKind.checkbox:
66-
semanticsObject.setAriaRole('checkbox');
66+
setAriaRole('checkbox');
6767
case _CheckableKind.radio:
68-
semanticsObject.setAriaRole('radio');
68+
setAriaRole('radio');
6969
case _CheckableKind.toggle:
70-
semanticsObject.setAriaRole('switch');
70+
setAriaRole('switch');
7171
}
7272

7373
/// Adding disabled and aria-disabled attribute to notify the assistive
7474
/// technologies of disabled elements.
7575
_updateDisabledAttribute();
7676

77-
semanticsObject.element.setAttribute(
77+
setAttribute(
7878
'aria-checked',
7979
(semanticsObject.hasFlag(ui.SemanticsFlag.isChecked) ||
8080
semanticsObject.hasFlag(ui.SemanticsFlag.isToggled))
@@ -92,17 +92,15 @@ class Checkable extends PrimaryRoleManager {
9292

9393
void _updateDisabledAttribute() {
9494
if (semanticsObject.enabledState() == EnabledState.disabled) {
95-
final DomElement element = semanticsObject.element;
96-
element
97-
..setAttribute('aria-disabled', 'true')
98-
..setAttribute('disabled', 'true');
95+
setAttribute('aria-disabled', 'true');
96+
setAttribute('disabled', 'true');
9997
} else {
10098
_removeDisabledAttribute();
10199
}
102100
}
103101

104102
void _removeDisabledAttribute() {
105-
final DomElement element = semanticsObject.element;
106-
element..removeAttribute('aria-disabled')..removeAttribute('disabled');
103+
removeAttribute('aria-disabled');
104+
removeAttribute('disabled');
107105
}
108106
}

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

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -38,8 +38,8 @@ class Dialog extends PrimaryRoleManager {
3838
}
3939
return true;
4040
}());
41-
semanticsObject.element.setAttribute('aria-label', label ?? '');
42-
semanticsObject.setAriaRole('dialog');
41+
setAttribute('aria-label', label ?? '');
42+
setAriaRole('dialog');
4343
}
4444
}
4545

@@ -51,8 +51,8 @@ class Dialog extends PrimaryRoleManager {
5151
return;
5252
}
5353

54-
semanticsObject.setAriaRole('dialog');
55-
semanticsObject.element.setAttribute(
54+
setAriaRole('dialog');
55+
setAttribute(
5656
'aria-describedby',
5757
routeName.semanticsObject.element.id,
5858
);
@@ -61,7 +61,10 @@ class Dialog extends PrimaryRoleManager {
6161

6262
/// Supplies a description for the nearest ancestor [Dialog].
6363
class RouteName extends RoleManager {
64-
RouteName(SemanticsObject semanticsObject) : super(Role.routeName, semanticsObject);
64+
RouteName(
65+
SemanticsObject semanticsObject,
66+
PrimaryRoleManager owner,
67+
) : super(Role.routeName, semanticsObject, owner);
6568

6669
Dialog? _dialog;
6770

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

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -28,17 +28,17 @@ import 'semantics.dart';
2828
///
2929
/// * https://developer.mozilla.org/en-US/docs/Web/Accessibility/Keyboard-navigable_JavaScript_widgets
3030
class Focusable extends RoleManager {
31-
Focusable(SemanticsObject semanticsObject)
31+
Focusable(SemanticsObject semanticsObject, PrimaryRoleManager owner)
3232
: _focusManager = AccessibilityFocusManager(semanticsObject.owner),
33-
super(Role.focusable, semanticsObject);
33+
super(Role.focusable, semanticsObject, owner);
3434

3535
final AccessibilityFocusManager _focusManager;
3636

3737
@override
3838
void update() {
3939
if (semanticsObject.isFocusable) {
4040
if (!_focusManager.isManaging) {
41-
_focusManager.manage(semanticsObject.id, semanticsObject.element);
41+
_focusManager.manage(semanticsObject.id, owner.element);
4242
}
4343
_focusManager.changeFocus(semanticsObject.hasFocus && (!semanticsObject.hasEnabledState || semanticsObject.isEnabled));
4444
} else {

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

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -49,13 +49,13 @@ class ImageRoleManager extends PrimaryRoleManager {
4949
..height = '${semanticsObject.rect!.height}px';
5050
}
5151
_auxiliaryImageElement!.style.fontSize = '6px';
52-
semanticsObject.element.append(_auxiliaryImageElement!);
52+
append(_auxiliaryImageElement!);
5353
}
5454

5555
_auxiliaryImageElement!.setAttribute('role', 'img');
5656
_setLabel(_auxiliaryImageElement);
5757
} else if (semanticsObject.isVisualOnly) {
58-
semanticsObject.setAriaRole('img');
58+
setAriaRole('img');
5959
_setLabel(semanticsObject.element);
6060
_cleanUpAuxiliaryElement();
6161
} else {
@@ -78,7 +78,7 @@ class ImageRoleManager extends PrimaryRoleManager {
7878
}
7979

8080
void _cleanupElement() {
81-
semanticsObject.element.removeAttribute('aria-label');
81+
removeAttribute('aria-label');
8282
}
8383

8484
@override

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ class Incrementable extends PrimaryRoleManager {
2929
addRouteName();
3030
addLabelAndValue();
3131

32-
semanticsObject.element.append(_element);
32+
append(_element);
3333
_element.type = 'range';
3434
_element.setAttribute('role', 'slider');
3535

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

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -26,8 +26,8 @@ import 'semantics.dart';
2626
/// This role manager does not manage images and text fields. See
2727
/// [ImageRoleManager] and [TextField].
2828
class LabelAndValue extends RoleManager {
29-
LabelAndValue(SemanticsObject semanticsObject)
30-
: super(Role.labelAndValue, semanticsObject);
29+
LabelAndValue(SemanticsObject semanticsObject, PrimaryRoleManager owner)
30+
: super(Role.labelAndValue, semanticsObject, owner);
3131

3232
@override
3333
void update() {
@@ -62,12 +62,11 @@ class LabelAndValue extends RoleManager {
6262
combinedValue.write(semanticsObject.value);
6363
}
6464

65-
semanticsObject.element
66-
.setAttribute('aria-label', combinedValue.toString());
65+
owner.setAttribute('aria-label', combinedValue.toString());
6766
}
6867

6968
void _cleanUpDom() {
70-
semanticsObject.element.removeAttribute('aria-label');
69+
owner.removeAttribute('aria-label');
7170
}
7271

7372
@override
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
// Copyright 2013 The Flutter Authors. All rights reserved.
2+
// Use of this source code is governed by a BSD-style license that can be
3+
// found in the LICENSE file.
4+
5+
import '../dom.dart';
6+
import '../semantics.dart';
7+
8+
/// Provides accessibility for links.
9+
class Link extends PrimaryRoleManager {
10+
Link(SemanticsObject semanticsObject) : super.withBasics(PrimaryRole.link, semanticsObject);
11+
12+
@override
13+
DomElement createElement() {
14+
final DomElement element = domDocument.createElement('a');
15+
// TODO(chunhtai): Fill in the real link once the framework sends entire uri.
16+
element.setAttribute('href', '#');
17+
element.style.display = 'block';
18+
return element;
19+
}
20+
}

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,8 @@ import 'semantics.dart';
1515
/// label of the element. See [LabelAndValue]. If there is no label provided
1616
/// no content will be read.
1717
class LiveRegion extends RoleManager {
18-
LiveRegion(SemanticsObject semanticsObject)
19-
: super(Role.liveRegion, semanticsObject);
18+
LiveRegion(SemanticsObject semanticsObject, PrimaryRoleManager owner)
19+
: super(Role.liveRegion, semanticsObject, owner);
2020

2121
String? _lastAnnouncement;
2222

0 commit comments

Comments
 (0)