Advanced interactions

This guide shows you how to implement advanced UI patterns for situations where the standard templates are insufficient for your app’s needs.

Prerequisites: Read the design guidelines introduction and the transaction screens guide before using the patterns described here.

Streamed transactions

For some operations, your app may not be able to fully load the data into memory before presenting it to users. When streaming transaction data to your device page by page, the navigation must change:

  • If the total number of pages is not known, hide the page count.
  • If the user cannot go back to previous pages, hide the “back” button.

Here is what an EIP-712 streamed message looks like in the Ethereum app, on Ledger Stax and Ledger Flex:

Streamed transaction UI on Ledger Stax and Flex, showing a footer without a back arrow or page numbers
The footer changes: no “back” arrow and no page numbers.
💻

API
nbgl_useCaseReviewStreamingStart()
nbgl_useCaseReviewStreamingContinue()
nbgl_useCaseReviewStreamingFinish()
These high-level API functions allow your app to stream pages of information, as shown above. View API docs.

⚠️

Avoid transaction streaming in your app whenever possible. Blocking users in a forward-only progression is not recommended UX.

Progressive disclosure of long fields

When signing operations with uncontrolled structure and contents, you can encounter data that is too long to fit in one field, even on one page.

In these cases, you can hide the contents of a field behind a “More” interaction to use progressive disclosure. This lets users move faster to signing while still providing a preview of the field contents.

When the user taps the “More” button, a modal containing the full field opens. If the field spans several pages, navigation arrows appear:

Progressive disclosure UI showing a field with a "More" button that expands into a multi-page modal

💻

API
There is no specific graphical API to display this “More” button. It is handled automatically by the nbgl_useCaseReview() and nbgl_useCaseReviewStreamingContinue() functions.

⚠️

Use progressive disclosure only for fields that do not affect your user’s privacy, security, or funds. Reserve this pattern for non-critical data only.

Key takeaways

  • · Use streaming only when the data genuinely cannot fit in memory — it limits user navigation.
  • · Use progressive disclosure only for non-critical fields that do not affect funds, privacy, or security.
  • · These guidelines evolve as new apps and operations surface new interface needs.

Next steps

Ledger
Copyright © Ledger SAS. All rights reserved. Ledger, Ledger Stax, Ledger Flex, Ledger Nano, Ledger Nano S, Ledger OS, Ledger Wallet, [LEDGER] (logo), [L] (logo) are trademarks owned by Ledger SAS.