diff --git a/lib/ui/semantics.dart b/lib/ui/semantics.dart index f6f4e2afed561..451b453391a89 100644 --- a/lib/ui/semantics.dart +++ b/lib/ui/semantics.dart @@ -288,6 +288,7 @@ class SemanticsFlag { static const int _kHasToggledStateIndex = 1 << 16; static const int _kIsToggledIndex = 1 << 17; static const int _kHasImplicitScrollingIndex = 1 << 18; + static const int _kIsMultilineIndex = 1 << 19; static const int _kIsReadOnlyIndex = 1 << 20; const SemanticsFlag._(this.index); @@ -386,6 +387,13 @@ class SemanticsFlag { /// is a password or contains other sensitive information. static const SemanticsFlag isObscured = SemanticsFlag._(_kIsObscuredIndex); + /// Whether the value of the semantics node is coming from a multi-line text + /// field. + /// + /// This is used for text fields to distinguish single-line text fields from + /// multi-line ones. + static const SemanticsFlag isMultiline = SemanticsFlag._(_kIsMultilineIndex); + /// Whether the semantics node is the root of a subtree for which a route name /// should be announced. /// @@ -512,6 +520,10 @@ class SemanticsFlag { _kHasToggledStateIndex: hasToggledState, _kIsToggledIndex: isToggled, _kHasImplicitScrollingIndex: hasImplicitScrolling, + // TODO(mdebbar): Uncomment after both these PRs are landed: + // - https://github.com/flutter/engine/pull/9850 + // - https://github.com/flutter/flutter/pull/36297 + // _kIsMultilineIndex: isMultiline, _kIsReadOnlyIndex: isReadOnly, }; @@ -556,6 +568,8 @@ class SemanticsFlag { return 'SemanticsFlag.isToggled'; case _kHasImplicitScrollingIndex: return 'SemanticsFlag.hasImplicitScrolling'; + case _kIsMultilineIndex: + return 'SemanticsFlag.isMultiline'; case _kIsReadOnlyIndex: return 'SemanticsFlag.isReadOnly'; } diff --git a/lib/ui/semantics/semantics_node.h b/lib/ui/semantics/semantics_node.h index 62f1b8b321107..81f98f1417bc6 100644 --- a/lib/ui/semantics/semantics_node.h +++ b/lib/ui/semantics/semantics_node.h @@ -69,6 +69,8 @@ enum class SemanticsFlags : int32_t { kHasToggledState = 1 << 16, kIsToggled = 1 << 17, kHasImplicitScrolling = 1 << 18, + // The Dart API defines the following flag but it isn't used in iOS. + // kIsMultiline = 1 << 19, kIsReadOnly = 1 << 20, }; diff --git a/shell/platform/android/io/flutter/view/AccessibilityBridge.java b/shell/platform/android/io/flutter/view/AccessibilityBridge.java index 3030b7f366560..8b138ad9ce831 100644 --- a/shell/platform/android/io/flutter/view/AccessibilityBridge.java +++ b/shell/platform/android/io/flutter/view/AccessibilityBridge.java @@ -1614,6 +1614,8 @@ private enum Flag { HAS_TOGGLED_STATE(1 << 16), IS_TOGGLED(1 << 17), HAS_IMPLICIT_SCROLLING(1 << 18), + // The Dart API defines the following flag but it isn't used in Android. + // IS_MULTILINE(1 << 19); IS_READ_ONLY(1 << 20); final int value;