Chuyển đến nội dung chính

Bài đăng

Hiển thị các bài đăng có nhãn A11y

Accessibility semantics checklist for Flutter forms

Accessibility is a launch requirement, not a backlog item. This article turns that observation into a small implementation model you can test, measure, and keep boring when the app grows. The problem in one sentence Labels, focus order, and contrast that pass audits. The useful question is not whether the API or pattern looks elegant in isolation. It is where state lives, which boundary owns failure, and how a user recovers when the happy path disappears. A practical model Merge semantics for decorative icons; label every interactive control. Start with one explicit owner for the behavior. Keep widgets responsible for rendering and user intent; keep IO, persistence, permissions, and retries behind a small interface. That gives you a seam for a fake in tests and a place to record the facts that matter in production. For a Flutter app, the boundary usually looks like this: The widget emits an intent such as load, submit, refresh, or retry. A controller or use case validates the...

A practical mobile accessibility audit in one day

One day of audit finds most blocking issues. This article turns that observation into a small implementation model you can test, measure, and keep boring when the app grows. The problem in one sentence TalkBack/VoiceOver, contrast, and touch targets. The useful question is not whether the API or pattern looks elegant in isolation. It is where state lives, which boundary owns failure, and how a user recovers when the happy path disappears. A practical model Pair a screen reader user with an engineer. Start with one explicit owner for the behavior. Keep widgets responsible for rendering and user intent; keep IO, persistence, permissions, and retries behind a small interface. That gives you a seam for a fake in tests and a place to record the facts that matter in production. For a Flutter app, the boundary usually looks like this: The widget emits an intent such as load, submit, refresh, or retry. A controller or use case validates the intent and calls the boundary. The boundar...