Commerce & Orders

Product Detail

The screen that opens when a customer taps a product in Product Card. Gets all its content from navigation params — it doesn’t fetch anything itself. Deliberately simpler than Menu Item Detail (no option groups, allergens, or nutrition): just image, title, price, description, tags, stock, quantity, and add to cart.

Flow positionProduct Card → Product Detail → Cart

Reached by tapping a product; add-to-cart routes onward to Cart.

Runtime datanavigationParams · onAddToCart

Product fields arrive entirely through navigation params from Product Card.

TierFree

Available on all plans.

What it does

Four things worth knowing

Variants and sizes

Optional color/style swatches (each with their own photo) and size chips. Selecting either updates the cart key so different options are tracked as separate line items.

Stock-capped quantity

The quantity stepper is capped at available stock client-side, for UX only — the backend’s atomic order write is the real source of truth and rejects oversold orders.

Add-to-cart confirmation sheet

After adding to cart, a bottom sheet confirms the item and offers “Continue shopping” (back to shopScreenId) or “View cart” (to cartScreenId).

Two layouts

hero (full-bleed image with overlaid back button) or classic (image inline, back button above it).

Placeholder note: without navigation params (e.g. viewed directly in the builder canvas), the screen shows a hint that it displays real data only when reached from Product Card.

Builder setup

Find it, drop it, wire the flow

Where to find itAdd it to your product screen

  1. Component picker → Commerce & OrdersProduct Detail.
  2. Place it on its own screen, then set that screen as Product Card’s detailScreenId.
  3. Set cartScreenId and shopScreenId for the post-add-to-cart sheet.

Before you publishThree things to check

  1. Navigation wiring: cartScreenId and shopScreenId both set.
  2. Confirm orderButtonLabel and quantity selector match your store’s tone.
  3. If products use variants/sizes, verify each variant has its own photo.
Category: Commerce & OrdersComponent: BuilderProductDetailRegistry key: product-detailFlow: Product Card → Product Detail → Cart
Props

Data, navigation, and content

PropTypeDefaultDescription
navigationParamsobjectInjected by AppPlayerAll product data (title, price, image, tags, stock, variants, sizes) arrives here from Product Card.
layouthero / classicheroImage treatment and back button placement.
onAddToCart, onGoBack, onScreenNavigatefunctionInjected by AppPlayerCallbacks for cart updates, back behavior, and screen routing.
cartScreenId, shopScreenIdscreen-select“View cart” and “Continue shopping” destinations in the confirmation sheet.
showQuantitySelector, showOrderButton, showStockbooleantrueFeature visibility toggles.
orderButtonLabelstring’Add to cart’CTA button copy.
lowStockThresholdnumber5Stock count at or below which the low-stock banner appears.
Toggles & colours

Make it yours

Most visual customisation lives in Builder style props. Keep component defaults in sync with registry defaultProps when updating branding tokens.

PropDefaultWhat it controls
backgroundColor, cardBackgroundColorTheme defaultsScreen and CTA bar surfaces.
titleColor, priceColor, descriptionColorTheme defaultsText hierarchy.
accentColorTheme defaultsSelected variant/size border highlight.
orderButtonColor, orderButtonTextColorTheme defaultsAdd-to-cart CTA styling.
cartConfirmBackgroundColor, cartConfirmIconColor, viewCartButtonColorTheme defaultsAdd-to-cart confirmation sheet styling.
stockLowColor, stockOutColor#F59E0B, #EF4444Stock banner colors.
titleFontSize, padding, fontFamilyComponent defaultsTypography scale and spacing.
Tips

Common mistakes to avoid

Client-side stock cap isn’t the final word

The quantity selector limits to available stock for UX, but the backend’s atomic order write can still reject an order if stock changed since the screen loaded.

Variants need their own photos

Colors and styles can’t be simulated from one photo — each variant needs a real, separate image uploaded in Admin Product Manager.

Always set both confirmation destinations

Without shopScreenId, “Continue shopping” falls back to a plain back navigation instead of returning to the catalog.

Pair with Product Card, not Menu Item Card

Product Detail reads the navigation param shape Product Card sends (variants, sizes, stock) — pairing it with Menu Item Card will leave those fields empty.