Skip to content

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

Description

@dario-digregorio

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.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions