Skip to main content
Question

Paywalls V2: Custom Google Font falls back to system font on first view

  • September 12, 2026
  • 1 reply
  • 15 views

Forum|alt.badge.img

 Using purchases_ui_flutter with Paywalls V2 configured with a Google Font (e.g. Newsreader). On a fresh install, the first time RevenueCatUI.presentPaywall() opens, the paywall renders using the default system fallback font. The native UI does not recompose once the font download finishes in the background. If the user closes and reopens the paywall, the correct font displays immediately because the font file is now cached locally. How can we trigger or guarantee font preloading on the first render?

1 reply

Forum|alt.badge.img+8
  • RevenueCat Staff
  • September 14, 2026

Hi, this is expected with Paywalls V2 today. Custom fonts, including a Google Font like Newsreader, are downloaded in the background when offerings are fetched. The paywall resolves fonts once when it is built, so the native UI will not swap to the downloaded typeface mid-presentation. On a fresh install, if that download has not finished, the first presentPaywall() uses the system fallback. After the file is cached, the next presentation shows the correct font.

purchases_ui_flutter does not currently expose an API to preload fonts or to wait for the download before presenting. Calling getOfferings() after configure() and passing that offering into presentPaywall() to pre-load it could help, but offerings return when the paywall JSON is ready, not when the font file is on disk — so it will not reliably fix the first view on a fresh install.

The best way to guarantee the correct font on first render is to bundle the font files in the native Android and iOS projects and match the names used in the Paywall Editor:

https://www.revenuecat.com/docs/tools/paywalls/displaying-paywalls#including-custom-fonts-in-your-app

For Flutter that means adding the files to the underlying native apps (not pubspec.yaml):

  • Android: put the .ttf/.otf files in android/app/src/main/res/font/. The filename without the extension must match the Android resource name in the font modal
  • iOS: add the files to the Xcode target and register them under Fonts provided by the application in Info.plist. The filename without the extension must match the font name in the editor.