toNavigationDestination method
Creates the destination widget tree for this OudsNavigationBarItem.
This is intended to be used by OudsNavigationBar on Android with Material. Internally, OudsNavigationBar is backed by the Material 3 NavigationBar and NavigationDestination widgets.
contextis used to access theme tokens and layout values.controlStatedrives icon/top-indicator colors according to the current OUDS navigation control state.isSelectedindicates whether this destination is currently selected.indexzero-based position of this item in the navigation bar.totaltotal number of destinations in the navigation bar.
Implementation
Column toNavigationDestination(
BuildContext context,
OudsNavigationBarControlState controlState, {
required bool isSelected,
required int index,
required int total,
VoidCallback? onTap,
}) {
final modifier = OudsNavigationBarStatusModifier(context);
final bar = OudsTheme.of(context).componentsTokens(context).bar;
// Builds the full TalkBack label: "Label[, badge], Tab X of Y"
final localizations = MaterialLocalizations.of(context);
final contentLabel = OudsNavigationBarA11y.buildTabSemanticLabel(
label,
badge,
);
final fullSemanticLabel =
'$contentLabel, ${localizations.tabLabel(tabIndex: index + 1, tabCount: total)}';
return Column(
mainAxisSize: MainAxisSize.min,
children: [
// Android: no external controller, uses internal animation
_buildTopIndicatorBar(context, bar, isSelected, controlState, index),
Flexible(
child: Semantics(
// Override NavigationDestination's internal semantics to enforce
// the correct reading order: "Label[, badge], Tab X of Y".
// onTap restores the activation action lost by ExcludeSemantics.
label: fullSemanticLabel,
selected: isSelected,
onTap: onTap,
child: ExcludeSemantics(
// Suppresses NavigationDestination's own semantic nodes,
// which would otherwise produce a wrong TalkBack reading order.
child: NavigationDestination(
label: label,
icon: _buildBadgeIconNavigationDestination(
context,
icon,
modifier,
controlState,
badge,
isSelected: isSelected,
),
selectedIcon: _buildBadgeIconNavigationDestination(
context,
icon,
modifier,
controlState,
badge,
isSelected: isSelected,
),
),
),
),
),
],
);
}