Skip to main content

avoid-merge-semantics-list-tile

effort: 2m
pro+

Warns when MergeSemantics has a ListTile or CheckboxListTile that defines a non-null trailing or leading argument.

Wrapping a ListTile inside MergeSemantics when the tile contains independent trailing/leading action buttons (e.g. a favorite button or delete icon button) collapses the entire tile into a single static text block.

This renders the secondary action buttons completely unclickable for screen reader users.

Example

❌ Bad:

// LINT: Wrapping 'ListTile' inside 'MergeSemantics' makes action buttons completely unaccessible for screen reader users.
// Try removing this widget.
MergeSemantics(child: ListTile(leading: IconButton()));

// LINT: Wrapping 'ListTile' inside 'MergeSemantics' makes action buttons completely unaccessible for screen reader users.
// Try removing this widget.
MergeSemantics(child: ListTile(trailing: IconButton()));

✅ Good:

ListTile(leading: IconButton());
ListTile(trailing: IconButton());

Additional Resources