mirror of
https://github.com/flutter/flutter.git
synced 2026-02-20 02:29:02 +08:00
[CP-beta]Fixes Typo in codebase (#181354)
This pull request is created by [automatic cherry pick workflow](https://github.com/flutter/flutter/blob/main/docs/releases/Flutter-Cherrypick-Process.md#automatically-creates-a-cherry-pick-request) Please fill in the form below, and a flutter domain expert will evaluate this cherry pick request. ### Issue Link: https://github.com/flutter/flutter/issues/181153 ### Impact Description: This PR is to fix a typo in a newly added API (AccessiblityFocusBlockType->AccessibilityFocusBlockType) The typo was inroduced in this PR https://github.com/flutter/flutter/pull/175551 which was merged on Nov 3, 2025 and is in 3.39-3.41 What is the impact The impact is to fix a small typo by hotfix, so we dont need to deprecate the API and add a new API. The risk is small because the API was recently added in Nov, 2025 and it's an API to control accessibility focus. I don't think it's widely used by external developers yet. Also the typo is not in the previous stable 3.38, so this only needs to be cp to beta. ### Changelog Description: Explain this cherry pick: * In one line that is accessible to most Flutter developers. * That describes the state prior to the fix. * That includes which platforms are impacted. See [best practices](https://github.com/flutter/flutter/blob/main/docs/releases/Hotfix-Documentation-Best-Practices.md) for examples. [flutter/181153] fix a typo in a newly added API (AccessiblityFocusBlockType->AccessibilityFocusBlockType) ### Workaround: Is there a workaround for this issue? no ### Risk: What is the risk level of this cherry-pick? ### Test Coverage: Are you confident that your fix is well-tested by automated tests? ### Validation Steps: What are the steps to validate that this fix works? N/A
This commit is contained in:
parent
f3c54a697e
commit
c433b3f7c0
@ -636,7 +636,7 @@ class _ExpansionTileState extends State<ExpansionTile> {
|
||||
// blockNode prevents this node from being part of the focus traversal.
|
||||
label: semanticsHint,
|
||||
liveRegion: true,
|
||||
accessiblityFocusBlockType: AccessiblityFocusBlockType.blockNode,
|
||||
accessibilityFocusBlockType: AccessibilityFocusBlockType.blockNode,
|
||||
child: Semantics(hint: semanticsHint, onTapHint: onTapHint, child: child),
|
||||
);
|
||||
}
|
||||
|
||||
@ -950,8 +950,8 @@ class RenderCustomPaint extends RenderProxyBox {
|
||||
if (properties.focused != null) {
|
||||
config.isFocused = properties.focused;
|
||||
}
|
||||
if (properties.accessiblityFocusBlockType != null) {
|
||||
config.accessiblityFocusBlockType = properties.accessiblityFocusBlockType!;
|
||||
if (properties.accessibilityFocusBlockType != null) {
|
||||
config.accessibilityFocusBlockType = properties.accessibilityFocusBlockType!;
|
||||
}
|
||||
if (properties.enabled != null) {
|
||||
config.isEnabled = properties.enabled;
|
||||
|
||||
@ -4853,8 +4853,8 @@ mixin SemanticsAnnotationsMixin on RenderObject {
|
||||
if (_properties.focused != null) {
|
||||
config.isFocused = _properties.focused;
|
||||
}
|
||||
if (_properties.accessiblityFocusBlockType != null) {
|
||||
config.accessiblityFocusBlockType = _properties.accessiblityFocusBlockType!;
|
||||
if (_properties.accessibilityFocusBlockType != null) {
|
||||
config.accessibilityFocusBlockType = _properties.accessibilityFocusBlockType!;
|
||||
}
|
||||
if (_properties.inMutuallyExclusiveGroup != null) {
|
||||
config.isInMutuallyExclusiveGroup = _properties.inMutuallyExclusiveGroup!;
|
||||
@ -5131,7 +5131,7 @@ final class _SemanticsParentData {
|
||||
required this.explicitChildNodes,
|
||||
required this.tagsForChildren,
|
||||
required this.localeForChildren,
|
||||
required this.accessiblityFocusBlockType,
|
||||
required this.accessibilityFocusBlockType,
|
||||
});
|
||||
|
||||
/// Whether [SemanticsNode]s created from this render object semantics subtree
|
||||
@ -5154,7 +5154,7 @@ final class _SemanticsParentData {
|
||||
/// * **blockNode**: Blocks accessibility focus for the **current node only**.
|
||||
///
|
||||
/// Only `blockSubtree` from a parent will be propagated down.
|
||||
final AccessiblityFocusBlockType? accessiblityFocusBlockType;
|
||||
final AccessibilityFocusBlockType? accessibilityFocusBlockType;
|
||||
|
||||
/// Any immediate render object semantics that
|
||||
/// [_RenderObjectSemantics.contributesToSemanticsTree] should forms a node
|
||||
@ -5581,11 +5581,11 @@ class _RenderObjectSemantics extends _SemanticsFragment with DiagnosticableTreeM
|
||||
final bool blocksUserAction =
|
||||
(parentData?.blocksUserActions ?? false) || configProvider.effective.isBlockingUserActions;
|
||||
|
||||
AccessiblityFocusBlockType accessiblityFocusBlockType;
|
||||
if (parentData?.accessiblityFocusBlockType == AccessiblityFocusBlockType.blockSubtree) {
|
||||
accessiblityFocusBlockType = AccessiblityFocusBlockType.blockSubtree;
|
||||
AccessibilityFocusBlockType accessibilityFocusBlockType;
|
||||
if (parentData?.accessibilityFocusBlockType == AccessibilityFocusBlockType.blockSubtree) {
|
||||
accessibilityFocusBlockType = AccessibilityFocusBlockType.blockSubtree;
|
||||
} else {
|
||||
accessiblityFocusBlockType = configProvider.effective.accessiblityFocusBlockType;
|
||||
accessibilityFocusBlockType = configProvider.effective.accessibilityFocusBlockType;
|
||||
}
|
||||
|
||||
// localeForSubtree from the config overrides parentData's inherited locale.
|
||||
@ -5599,7 +5599,7 @@ class _RenderObjectSemantics extends _SemanticsFragment with DiagnosticableTreeM
|
||||
(parentData?.mergeIntoParent ?? false) ||
|
||||
configProvider.effective.isMergingSemanticsOfDescendants,
|
||||
blocksUserActions: blocksUserAction,
|
||||
accessiblityFocusBlockType: accessiblityFocusBlockType,
|
||||
accessibilityFocusBlockType: accessibilityFocusBlockType,
|
||||
localeForChildren: localeForChildren,
|
||||
explicitChildNodes: explicitChildNodesForChildren,
|
||||
tagsForChildren: tagsForChildren,
|
||||
@ -5645,9 +5645,9 @@ class _RenderObjectSemantics extends _SemanticsFragment with DiagnosticableTreeM
|
||||
tags.forEach(config.addTagForChildren);
|
||||
});
|
||||
}
|
||||
if (accessiblityFocusBlockType != configProvider.effective.accessiblityFocusBlockType) {
|
||||
if (accessibilityFocusBlockType != configProvider.effective.accessibilityFocusBlockType) {
|
||||
configProvider.updateConfig((SemanticsConfiguration config) {
|
||||
config.accessiblityFocusBlockType = accessiblityFocusBlockType;
|
||||
config.accessibilityFocusBlockType = accessibilityFocusBlockType;
|
||||
});
|
||||
}
|
||||
|
||||
@ -5725,7 +5725,7 @@ class _RenderObjectSemantics extends _SemanticsFragment with DiagnosticableTreeM
|
||||
effectiveChildParentData = _SemanticsParentData(
|
||||
mergeIntoParent: childParentData.mergeIntoParent,
|
||||
blocksUserActions: childParentData.blocksUserActions,
|
||||
accessiblityFocusBlockType: childParentData.accessiblityFocusBlockType,
|
||||
accessibilityFocusBlockType: childParentData.accessibilityFocusBlockType,
|
||||
explicitChildNodes: false,
|
||||
tagsForChildren: childParentData.tagsForChildren,
|
||||
localeForChildren: childParentData.localeForChildren,
|
||||
|
||||
@ -119,7 +119,7 @@ typedef ChildSemanticsConfigurationsDelegate =
|
||||
///
|
||||
/// This is typically used to prevent screen readers
|
||||
/// from focusing on parts of the UI.
|
||||
enum AccessiblityFocusBlockType {
|
||||
enum AccessibilityFocusBlockType {
|
||||
/// Accessibility focus is **not blocked**.
|
||||
none,
|
||||
|
||||
@ -130,22 +130,22 @@ enum AccessiblityFocusBlockType {
|
||||
/// may still be focusable.
|
||||
blockNode;
|
||||
|
||||
/// The AccessiblityFocusBlockType when two nodes get merged.
|
||||
AccessiblityFocusBlockType _merge(AccessiblityFocusBlockType other) {
|
||||
/// The AccessibilityFocusBlockType when two nodes get merged.
|
||||
AccessibilityFocusBlockType _merge(AccessibilityFocusBlockType other) {
|
||||
// 1. If either is blockSubtree, the result is blockSubtree.
|
||||
if (this == AccessiblityFocusBlockType.blockSubtree ||
|
||||
other == AccessiblityFocusBlockType.blockSubtree) {
|
||||
return AccessiblityFocusBlockType.blockSubtree;
|
||||
if (this == AccessibilityFocusBlockType.blockSubtree ||
|
||||
other == AccessibilityFocusBlockType.blockSubtree) {
|
||||
return AccessibilityFocusBlockType.blockSubtree;
|
||||
}
|
||||
|
||||
// 2. If either is blockNode, the result is blockNode
|
||||
if (this == AccessiblityFocusBlockType.blockNode ||
|
||||
other == AccessiblityFocusBlockType.blockNode) {
|
||||
return AccessiblityFocusBlockType.blockNode;
|
||||
if (this == AccessibilityFocusBlockType.blockNode ||
|
||||
other == AccessibilityFocusBlockType.blockNode) {
|
||||
return AccessibilityFocusBlockType.blockNode;
|
||||
}
|
||||
|
||||
// 3. If neither is blockSubtree nor blockNode, both must be none.
|
||||
return AccessiblityFocusBlockType.none;
|
||||
return AccessibilityFocusBlockType.none;
|
||||
}
|
||||
}
|
||||
|
||||
@ -1642,7 +1642,7 @@ class SemanticsProperties extends DiagnosticableTree {
|
||||
)
|
||||
this.focusable,
|
||||
this.focused,
|
||||
this.accessiblityFocusBlockType,
|
||||
this.accessibilityFocusBlockType,
|
||||
this.inMutuallyExclusiveGroup,
|
||||
this.hidden,
|
||||
this.obscured,
|
||||
@ -1857,7 +1857,7 @@ class SemanticsProperties extends DiagnosticableTree {
|
||||
/// This is for accessibility focus, which is the focus used by screen readers
|
||||
/// like TalkBack and VoiceOver. It is different from input focus, which is
|
||||
/// usually held by the element that currently responds to keyboard inputs.
|
||||
final AccessiblityFocusBlockType? accessiblityFocusBlockType;
|
||||
final AccessibilityFocusBlockType? accessibilityFocusBlockType;
|
||||
|
||||
/// If non-null, whether a semantic node is in a mutually exclusive group.
|
||||
///
|
||||
@ -6306,14 +6306,16 @@ class SemanticsConfiguration {
|
||||
_hasBeenAnnotated = true;
|
||||
}
|
||||
|
||||
AccessiblityFocusBlockType _accessiblityFocusBlockType = AccessiblityFocusBlockType.none;
|
||||
AccessibilityFocusBlockType _accessibilityFocusBlockType = AccessibilityFocusBlockType.none;
|
||||
|
||||
/// Whether the owning [RenderObject] and its subtree
|
||||
/// is blocked in the a11y focus (different from input focus).
|
||||
AccessiblityFocusBlockType get accessiblityFocusBlockType => _accessiblityFocusBlockType;
|
||||
set accessiblityFocusBlockType(AccessiblityFocusBlockType value) {
|
||||
_accessiblityFocusBlockType = value;
|
||||
_flags = _flags.copyWith(isAccessibilityFocusBlocked: value != AccessiblityFocusBlockType.none);
|
||||
AccessibilityFocusBlockType get accessibilityFocusBlockType => _accessibilityFocusBlockType;
|
||||
set accessibilityFocusBlockType(AccessibilityFocusBlockType value) {
|
||||
_accessibilityFocusBlockType = value;
|
||||
_flags = _flags.copyWith(
|
||||
isAccessibilityFocusBlocked: value != AccessibilityFocusBlockType.none,
|
||||
);
|
||||
_hasBeenAnnotated = true;
|
||||
}
|
||||
|
||||
@ -6797,8 +6799,8 @@ class SemanticsConfiguration {
|
||||
_validationResult = child._validationResult;
|
||||
}
|
||||
}
|
||||
_accessiblityFocusBlockType = _accessiblityFocusBlockType._merge(
|
||||
child._accessiblityFocusBlockType,
|
||||
_accessibilityFocusBlockType = _accessibilityFocusBlockType._merge(
|
||||
child._accessibilityFocusBlockType,
|
||||
);
|
||||
_minValue ??= child._minValue;
|
||||
_maxValue ??= child._maxValue;
|
||||
@ -6829,7 +6831,7 @@ class SemanticsConfiguration {
|
||||
.._attributedValue = _attributedValue
|
||||
.._attributedDecreasedValue = _attributedDecreasedValue
|
||||
.._attributedHint = _attributedHint
|
||||
.._accessiblityFocusBlockType = _accessiblityFocusBlockType
|
||||
.._accessibilityFocusBlockType = _accessibilityFocusBlockType
|
||||
.._hintOverrides = _hintOverrides
|
||||
.._tooltip = _tooltip
|
||||
.._flags = _flags
|
||||
|
||||
@ -4048,7 +4048,7 @@ sealed class _SemanticsBase extends SingleChildRenderObjectWidget {
|
||||
required bool? readOnly,
|
||||
required bool? focusable,
|
||||
required bool? focused,
|
||||
required AccessiblityFocusBlockType? accessiblityFocusBlockType,
|
||||
required AccessibilityFocusBlockType? accessibilityFocusBlockType,
|
||||
required bool? inMutuallyExclusiveGroup,
|
||||
required bool? obscured,
|
||||
required bool? multiline,
|
||||
@ -4136,7 +4136,7 @@ sealed class _SemanticsBase extends SingleChildRenderObjectWidget {
|
||||
readOnly: readOnly,
|
||||
focusable: focusable,
|
||||
focused: focused,
|
||||
accessiblityFocusBlockType: accessiblityFocusBlockType,
|
||||
accessibilityFocusBlockType: accessibilityFocusBlockType,
|
||||
inMutuallyExclusiveGroup: inMutuallyExclusiveGroup,
|
||||
obscured: obscured,
|
||||
multiline: multiline,
|
||||
@ -4384,7 +4384,7 @@ class SliverSemantics extends _SemanticsBase {
|
||||
super.readOnly,
|
||||
super.focusable,
|
||||
super.focused,
|
||||
super.accessiblityFocusBlockType,
|
||||
super.accessibilityFocusBlockType,
|
||||
super.inMutuallyExclusiveGroup,
|
||||
super.obscured,
|
||||
super.multiline,
|
||||
@ -7969,7 +7969,7 @@ class Semantics extends _SemanticsBase {
|
||||
super.readOnly,
|
||||
super.focusable,
|
||||
super.focused,
|
||||
super.accessiblityFocusBlockType,
|
||||
super.accessibilityFocusBlockType,
|
||||
super.inMutuallyExclusiveGroup,
|
||||
super.obscured,
|
||||
super.multiline,
|
||||
|
||||
@ -879,13 +879,13 @@ void main() {
|
||||
await tester.pumpWidget(
|
||||
Semantics(
|
||||
container: true,
|
||||
accessiblityFocusBlockType: AccessiblityFocusBlockType.blockSubtree,
|
||||
accessibilityFocusBlockType: AccessibilityFocusBlockType.blockSubtree,
|
||||
child: Column(
|
||||
children: <Widget>[
|
||||
// If the child set blockSubTreeAccessibilityFocus to `none`, it's still blcok because its parent.
|
||||
Semantics(
|
||||
container: true,
|
||||
accessiblityFocusBlockType: AccessiblityFocusBlockType.none,
|
||||
accessibilityFocusBlockType: AccessibilityFocusBlockType.none,
|
||||
customSemanticsActions: <CustomSemanticsAction, VoidCallback>{
|
||||
const CustomSemanticsAction(label: 'action1'): () {},
|
||||
},
|
||||
@ -944,12 +944,12 @@ void main() {
|
||||
await tester.pumpWidget(
|
||||
Semantics(
|
||||
container: true,
|
||||
accessiblityFocusBlockType: AccessiblityFocusBlockType.blockNode,
|
||||
accessibilityFocusBlockType: AccessibilityFocusBlockType.blockNode,
|
||||
child: Column(
|
||||
children: <Widget>[
|
||||
Semantics(
|
||||
container: true,
|
||||
accessiblityFocusBlockType: AccessiblityFocusBlockType.none,
|
||||
accessibilityFocusBlockType: AccessibilityFocusBlockType.none,
|
||||
customSemanticsActions: <CustomSemanticsAction, VoidCallback>{
|
||||
const CustomSemanticsAction(label: 'action1'): () {},
|
||||
},
|
||||
@ -1004,7 +1004,7 @@ void main() {
|
||||
children: <Widget>[
|
||||
Semantics(
|
||||
container: true,
|
||||
accessiblityFocusBlockType: AccessiblityFocusBlockType.blockNode,
|
||||
accessibilityFocusBlockType: AccessibilityFocusBlockType.blockNode,
|
||||
label: 'node1',
|
||||
child: const SizedBox(width: 10, height: 10),
|
||||
),
|
||||
@ -1050,7 +1050,7 @@ void main() {
|
||||
child: Semantics(
|
||||
label: 'root',
|
||||
child: Semantics(
|
||||
accessiblityFocusBlockType: AccessiblityFocusBlockType.blockNode,
|
||||
accessibilityFocusBlockType: AccessibilityFocusBlockType.blockNode,
|
||||
label: 'semantics label 0',
|
||||
child: Column(
|
||||
children: <Widget>[
|
||||
@ -1105,7 +1105,7 @@ void main() {
|
||||
child: Semantics(
|
||||
label: 'root',
|
||||
child: Semantics(
|
||||
accessiblityFocusBlockType: AccessiblityFocusBlockType.blockSubtree,
|
||||
accessibilityFocusBlockType: AccessibilityFocusBlockType.blockSubtree,
|
||||
label: 'semantics label 0',
|
||||
child: Column(
|
||||
children: <Widget>[
|
||||
@ -1151,7 +1151,7 @@ void main() {
|
||||
await tester.pumpWidget(
|
||||
Semantics(
|
||||
container: true,
|
||||
accessiblityFocusBlockType: AccessiblityFocusBlockType.blockSubtree,
|
||||
accessibilityFocusBlockType: AccessibilityFocusBlockType.blockSubtree,
|
||||
focused: true,
|
||||
customSemanticsActions: <CustomSemanticsAction, VoidCallback>{
|
||||
const CustomSemanticsAction(label: 'action1'): () {},
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user