Skip to content

辅助功能 (Accessibility) ​


Flet 基于 Flutter 构建,除了底层操作系统提供的辅助功能支持外,框架层本身也包含了一流的辅助功能(Accessibility)支持。


屏幕阅读器 (Screen readers) ​

在移动端,屏幕阅读器(Android 上的 TalkBack,iOS 上的 VoiceOver)可协助视力障碍用户获取屏幕内容的语音反馈,并允许在移动设备上通过手势或在桌面设备上通过键盘快捷键与 UI 进行交互。你可以尝试开启移动设备上的 VoiceOver 或 TalkBack,在你的应用中浏览操作。

在 Web 端,目前支持以下屏幕阅读器:

移动端浏览器:

  • iOS — VoiceOver
  • Android — TalkBack

桌面端浏览器:

  • macOS — VoiceOver
  • Windows — JAWS & NVDA

Web 端屏幕阅读器用户需要切换(点击)“启用辅助功能(Enable accessibility)”按钮来构建语义树(Semantics tree)。


文本 (Text) ​

使用 Text.semantics_label 属性可覆盖默认的 Text 控件语义信息。


按钮 (Buttons) ​

所有带文本的按钮都会自动生成对应的语义。

可以使用 tooltip 属性为 IconButton、FloatingActionButton 和 PopupMenuButton 按钮添加屏幕阅读器语义。


TextField 和 Dropdown ​

使用 TextField.label 和 Dropdown.label 属性可以为这些控件添加屏幕阅读器语义。


自定义语义 (Custom semantics) ​

对于任何特定的特殊需求,可以使用 Semantics 控件来精细定义。


调试语义 (Debugging semantics) ​

将 Page.show_semantics_debugger 设置为 True 可以显示一个辅助功能调试图层(Overlay),该图层能够可视化展示由框架报告的辅助功能语义信息。

你可以在应用开发过程中实现一个特定的键盘快捷键,从而方便地切换辅助功能调试器的显示状态:

辅助功能调试器演示

提示

你可以在这里在线尝试。

python
import flet as ft


def main(page: ft.Page):
    page.vertical_alignment = ft.MainAxisAlignment.CENTER
    page.horizontal_alignment = ft.CrossAxisAlignment.CENTER

    def on_keyboard(e: ft.KeyboardEvent):
        if e.shift and e.key == "S":
            page.show_semantics_debugger = not page.show_semantics_debugger
            page.update()

    page.on_keyboard_event = on_keyboard

    def button_click(e: ft.Event[ft.Button]):
        counter.value = str(int(counter.value) + 1)
        page.update()

    page.add(
        ft.SafeArea(
            content=ft.Column(
                controls=[
                    counter := ft.Text("0", size=40),
                    ft.Text("按 Shift+S 键来切换辅助功能调试器"),
                    ft.Button(
                        content="增加数字",
                        icon=ft.Icons.ADD,
                        on_click=button_click,
                    ),
                ]
            )
        )
    )


if __name__ == "__main__":
    ft.run(main)

关注我,学习大模型、大数据、Python等热门技术。