• Ian Hickson's avatar
    Make DecoratedBox repaint after being reparented (#13927) · 316d8e1c
    Ian Hickson authored
    Fixes https://github.com/flutter/flutter/issues/12553
    
    The root cause of https://github.com/flutter/flutter/issues/12553 was that when the refresh indicator went away, which happened after the avatars had started their image loads but before the avatars had loaded, the DecoratedBoxes, along with the rest of the list, got GlobalKey-reparented, which caused the RenderDecoratedBox objects to unregister from the DecorationImagePainters, but they never re-registered since the whole subtree was in a RepaintBoundary and was therefore not explicitly repainted when the tree got reattached.
    
    This fixes the bug by explicitly requiring any RenderDecoratedBox to repaint when it's reattached. This is probably a little more aggressive than required; we could probably expose a flag on Decoration that says whether or not the onChanged handler will ever be invoked, and only call markNeedsPaint if that's true, but we'll do that if it turns out that there's a performance issue here.
    
    (This patch also introduces a bunch of improved debugging information that I used to track down the bug.)
    316d8e1c
decoration_image.dart 17.4 KB