rive-app / rive-app/rive-flutter

Android: widgets stop painting on 0.15.0-dev.1 (works on 0.14.11)

Open
#651 1 comment 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Dominant language
Dart
Stars
1.5k
Forks
240
PR merge metrics
No merged PRs in 30d

Description

I upgraded rive 0.14.11 to 0.15.0-dev.1 (rive_native 0.1.11 to 0.2.0-dev.1) and Rive widgets
stopped painting in two cases. Going back to 0.14.11 fixes both, nothing else changed.
Only happens on Android, iOS is fine.

Setup

  • rive 0.15.0-dev.1, rive_native 0.2.0-dev.1
  • Flutter 3.44.8 stable, Android with Impeller. Not reproducible on iOS.
  • Factory.rive
  • One .riv (~220 KB) decoded once at startup with File.asset and shared through a provider.
    Several RiveWidgets alive at the same time, each with its own RiveWidgetController and
    its own artboard selected by name.

1. Widget never repaints after controller.active goes false and then true again

I pause offscreen animations with controller.active = false and set it back to true when
they get visible again. Works on 0.14.11. On 0.15.0-dev.1 the widget never paints again, it
stays on the last frame, or stays blank if it was paused before its first paint. View model
writes still work.

2. Several widgets mounted at once stay blank for a few seconds

A scrollable sheet mounts 3-5 RiveWidgets at once, all from the same decoded File. Some
render empty for a few seconds after opening and then appear one by one.

What I tried, none of it helped

  • controller.scheduleRepaint() right after setting active = true
  • Making sure the state machine never settles (kept a layer running) so advance() keeps
    returning true
  • Giving every widget its own decoded File so each gets its own session. This made case 2
    worse, all widgets were blank instead of only some
  • Putting all widgets into one RivePanel shared texture. This fixed case 1, but it gives me
    scroll jank in a list and I lose per widget rounded corner clipping, so I can't use it

Repro

No minimal project yet, I can build one if that helps.

Case 1: decode a .riv with Factory.rive, render a RiveWidget, set
controller.active = false around the first frame, set it back to true a second later. It
does not paint again.

Case 2: mount 3-5 RiveWidgets from the same decoded File with a heavier artboard.

I pinned 0.14.11 for now but would like to move to 0.15 for the deferred renderer.

Contributor guide

No contributing guide indexed for this repository

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start by reproducing both cases with Factory.rive, File.asset, RiveWidget, RiveWidgetController, and the shared or separate decoded File setups on Android with Impeller, comparing 0.14.11 with 0.15.0-dev.1. Done means widgets repaint after controller.active is restored and multiple mounted widgets no longer remain blank or appear several seconds late, without requiring a shared RivePanel.

Written by the indexing model from the issue text.

Assessment

Tech stack
android, dart, flutter
Domain
frontend, mobile
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Active
Clarity
Mostly clear
Newbie friendliness
48/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.