# It looks like a heart. It says "button".

> Silent for the team. Loud for the user.

- **Format:** short video, 9 steps, ~51 seconds
- **Topic:** AI agents for accessibility, localization, documentation and SEO — a favourite heart button on a Flutter restaurant card announces itself to TalkBack as only "button", and how a hook finds unnamed controls, an agent confirms the real ones, and a concatenated status string becomes one translatable message.
- **Author:** Suthahar Jegatheesan (MSDEVBUILD)
- **Category:** AI · AI
- **Published:** 2026-09-12
- **Tags:** accessibility, a11y, flutter, localization, aiagents, seo, wcag, msdevbuild
- **Canonical URL:** https://blog.msdevbuild.com/shorts/ai-reach-agents-heart-says-button/

---
## What you'll learn

- Why unnamed buttons pass every code review
- Why a script finds candidates and an agent confirms them
- Why a sentence built from fragments cannot be translated

## Understand it one step at a time

### 1. A heart on every card

An InkWell around a heart Icon. It passes every review.

### 2. TalkBack on

Swipe to the heart. The phone says "button". On every card.

### 3. A script finds 15

Interactive widgets with no semanticLabel, tooltip or Semantics nearby.

### 4. The agent confirms

A Tooltip above or a Text child already names a control. The heart has neither.

### 5. Name it

Semantics(label: "Add to favourites" or "Remove from favourites").

### 6. Same story in strings

"Order ${id} → ${status}", built in English word order, inside a bloc.

### 7. One message

orderStatusChanged(id, status), with a description for the translator.

### 8. Ranked, and quoted

Titles measured in pixels. Question headings with two-sentence answers.

### 9. Make it say what it does

A script finds candidates, an agent confirms them, a person listens.

---

## The takeaway

**It looks like a heart. Make it say so.**

Accessibility and localization defects are silent for the team and loud for everyone else.
