rive-app / rive-app/rive-flutter
Android: widgets stop painting on 0.15.0-dev.1 (works on 0.14.11)
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.assetand shared through a provider.
SeveralRiveWidgets alive at the same time, each with its ownRiveWidgetControllerand
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 settingactive = true- Making sure the state machine never settles (kept a layer running) so
advance()keeps
returning true - Giving every widget its own decoded
Fileso each gets its own session. This made case 2
worse, all widgets were blank instead of only some - Putting all widgets into one
RivePanelshared 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
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- 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