1年間Flutterで開発していてわかったアクセシビリティの問題(iOS編)


この1年コンスタントにFlutterでコーディングをしていてわかったスクリーンリーダー(VoiceOver)の問題についての記録です。
Androidについては1年間Flutterで開発をしていてわかったアクセシビリティの問題(Android編)をご覧ください。


1. 項目を選択したときのガイドアナウンスが読み上げられない

ボタンや項目などを選択したときには通常
開くにはダブルタップします
のようなアナウンスがあります。
これによりユーザは項目が操作可能かどうかを知ることができます。

2. リストをスクロールしたときの度合いを読み上げない

通常リストをスクロールさせた場合

  • リストの総数
  • 表示されている項目の開始位置
  • 表示終了位置


全50行中10行目から20行目まで
のように読み上げられます。

3. 垂直スクロールバーにフォーカスされていない

検索をすると表示させることは造作もないことのようですが、残念ながらVoiceOverがフォーカスできていないようです。(水平も同様)
垂直スクロールバーでは

  • その画面がトータルでいくつの画面が連なって構成されているのかという情報の読み上げ
  • 1本指の下または上のスワイプでスクロールを行うことができる

という利点があります。

4. Semanticsクラスのヒントがアナウンスされない

項目に対し、アクセシビリティ機能を付加するクラスがSemanticsクラスです。
その中のhint onTapHint onLongPressHint の内容が読み上げられません。
1. によく似ていますが、これはOSがデフォルトで用意している内容をアナウンスします。
(少なくともAndroidではそのように動いていると思われます)
上記の3つは開発者側でアナウンスする内容を指定するプロパティです。
ユーザに明確に操作したときの結果を伝えることができます。


まとめ

上記は開発をしつつissueとして報告していますが、改善されていない問題です。
Androidの場合は正常に動作しています。
またWebView()で記述した場合には発生しません。

issueで報告しても暖簾に腕押しで困っています。
Flutterの開発に関わっている方やバグ修正が得意な方がいらっしゃいましたら改善に力を貸していただけますと幸いです。

下記のサンプルコードで上記4つの問題が確認できます。
VoiceOverをONにしてお試しください。
VoiceOverはSiriでON/OFFができます。
安易に設定から有効にするとジェスチャーが変わり、戸惑われますのでご注意ください。

VoiceOverサンプル