Repository: flutter
Issue: [iOS][a11y] Voiceover does not pause when reading merged semantic labels
Labels: platform-ios,framework,a: accessibility,P2,customer: huggsy (g3),team-ios,triaged-ios

Internal: b/258954095

##Summary

Flutter combines semantic labels from merged nodes by inserting a newline between phrases: https://github.com/flutter/flutter/blob/bf906e6cec85aa87be4aa681d0f053a3eb4690a1/packages/flutter/lib/src/semantics/semantics.dart#L4639-L4662

On Android, in Talkback, this causes the phrases to be read with a reasonable pause between them. However, on iOS/MacOS-Web, with Voiceover, the two phrases are read as if they are separated by only a space.

This is because Voiceover only pauses if there are two newlines, or special punctuation marks like hyphens, commas, periods, or semi-colons (https://discussions.apple.com/thread/1505448, https://stackoverflow.com/questions/69715307)

Talkback supports all of the above pause indicators as well, though iirc it has slight side effects in the double newline case (something like an overly long pause).

## Steps to Reproduce

Run the `Card` example on iOS with Voiceover on: https://api.flutter.dev/flutter/material/Card-class.html

**Expected results:** The card contents read "The Enchanted Nightingale Music by Julie Gable", and sounds indistinguishable from being a single phrase.

**Actual results:** The card contents should be read as two separate phrases, like "The Enchanted Nightingale (pause) Music by Julie Gable."

<details>
  <summary>Logs</summary>

<!-- Finally, paste the output of running `flutter doctor -v` here. -->

```
[✓] Flutter (Channel google3, on Debian GNU/Linux rodete 5.18.16-1rodete4-amd64, locale
    en_US.UTF-8)
    • Framework revision fe9b598c12 (71 days ago), 2022-10-09T00:00:00.000
    • Engine revision ac1fec6367
    • Dart version 2f0c186d3b

[✓] Android toolchain - develop for Android devices (Android SDK version Stable)
    • Android SDK at google3
    • Platform Stable, build-tools Stable
    • Java binary at: /opt/android-studio-with-blaze-2021.3/jre/bin/java
    • Java version OpenJDK Runtime Environment (build 11.0.13+0-b1751.21-8125866)

[✓] Android Studio (version 4.2)
    • Android Studio at /opt/android-studio-with-blaze-4.2
    • Flutter plugin version 58.0.1
    • Dart plugin version 202.8443
    • Java version OpenJDK Runtime Environment (build 11.0.8+0-b944-P17168821)

[✓] Android Studio (version 2020.3)
    • Android Studio at /opt/android-studio-with-blaze-2020.3
    • Flutter plugin version 61.2.2
    • Dart plugin version 203.8292
    • Java version OpenJDK Runtime Environment (build 11.0.10+0-b96-7249189)

[✓] Android Studio (version 2021.3)
    • Android Studio at /opt/android-studio-with-blaze-2021.3
    • Flutter plugin version 69.0.3
    • Dart plugin version 213.7371
    • Java version OpenJDK Runtime Environment (build 11.0.13+0-b1751.21-8125866)

[✓] IntelliJ IDEA Community Edition (version 2019.2)
    • IntelliJ at /opt/intellij-ce-stable
    • Flutter plugin can be installed from:
      🔨 https://plugins.jetbrains.com/plugin/9212-flutter
    • Dart plugin can be installed from:
      🔨 https://plugins.jetbrains.com/plugin/6351-dart

[✓] VS Code (version 1.72.2)
    • VS Code at /usr/share/code
    • Flutter extension version 3.52.0

[✓] Connected device (2 available)
    • Android SDK built for x86 (mobile) • emulator-5554 • android-x86 • Android 9 (API
      28) (emulator)
    • Linux (desktop)                    • linux         • linux-x64   • Debian GNU/Linux
      rodete 5.18.16-1rodete4-amd64

[✓] Google3 (on linux)
    • KVM enabled

• No issues found!
```

</details>