Skip to content

flexible_space_bar.dart': Failed assertion: line 475 pos 12: 'needsCompositing': is not true. is thrown when scrolling down in the list and then up  #135698

@CardosoShlomo

Description

@CardosoShlomo

this issue is also represented at #135486

Code sample
main() => runApp(MaterialApp(
    home: NestedScrollView(
      headerSliverBuilder: (context, _) => [SliverOverlapAbsorber(
        handle: NestedScrollView.sliverOverlapAbsorberHandleFor(context),
        sliver: SliverAppBar(
          expandedHeight: 300,
          pinned: true,
          flexibleSpace: FlexibleSpaceBar(background: SizedBox()),
        ),
      )],
      body: SizedBox(),
    ),
  ));

Why it happens

the cause for the issue is that RenderOpacity use _alpha to override alwaysNeedsCompositing
and _RenderFlexibleSpaceHeaderOpacity doesn't use it before the needCompositing assertion.

RenderOpacity
RenderOpacity({
    double opacity = 1.0,
    bool alwaysIncludeSemantics = false,
    RenderBox? child,
  }) : assert(opacity >= 0.0 && opacity <= 1.0),
       _opacity = opacity,
       _alwaysIncludeSemantics = alwaysIncludeSemantics,
       _alpha = ui.Color.getAlphaFromOpacity(opacity),
       super(child);

  @override
  bool get alwaysNeedsCompositing => child != null && _alpha > 0;

My Recommended solution

_RenderFlexibleSpaceHeaderOpacity:

before
if (opacity == 0) {
  layer = null;
  return;
}
assert(needsCompositing);
after
if (ui.Color.getAlphaFromOpacity(opacity) == 0) {
  layer = null;
  return;
}
assert(needsCompositing);

Logs

Logs
======== Exception caught by rendering library =====================================================
The following assertion was thrown during paint():
'package:flutter/src/material/flexible_space_bar.dart': Failed assertion: line 467 pos 12: 'needsCompositing': is not true.


Either the assertion indicates an error in the framework itself, or we should provide substantially more information in this error message to help you determine and fix the underlying cause.
In either case, please report this assertion by filing a bug on GitHub:
  https://github.com/flutter/flutter/issues/new?template=2_bug.yml

The relevant error-causing widget was: 
  FlexibleSpaceBar FlexibleSpaceBar:file:///C:/Users/shlom/StudioProjects/imagine-ai/lib/pages/settings_page/cloud_page/cloud_app_bar.dart:27:24
When the exception was thrown, this was the stack: 
#2      _RenderFlexibleSpaceHeaderOpacity.paint (package:flutter/src/material/flexible_space_bar.dart:467:12)
#3      RenderObject._paintWithContext (package:flutter/src/rendering/object.dart:3155:7)
#4      PaintingContext.paintChild (package:flutter/src/rendering/object.dart:252:13)
#5      RenderBoxContainerDefaultsMixin.defaultPaint (package:flutter/src/rendering/box.dart:2875:15)
#6      RenderStack.paintStack (package:flutter/src/rendering/stack.dart:639:5)
#7      PaintingContext.pushClipRect.<anonymous closure> (package:flutter/src/rendering/object.dart:535:83)
#8      ClipContext._clipAndPaint (package:flutter/src/painting/clip.dart:25:12)
#9      ClipContext.clipRectAndPaint (package:flutter/src/painting/clip.dart:53:5)
#10     PaintingContext.pushClipRect (package:flutter/src/rendering/object.dart:535:7)
#11     RenderStack.paint (package:flutter/src/rendering/stack.dart:645:38)
#12     RenderObject._paintWithContext (package:flutter/src/rendering/object.dart:3155:7)
#13     PaintingContext.paintChild (package:flutter/src/rendering/object.dart:252:13)
#14     RenderProxyBoxMixin.paint (package:flutter/src/rendering/proxy_box.dart:129:13)
#15     PaintingContext.pushClipRect.<anonymous closure> (package:flutter/src/rendering/object.dart:535:83)
#16     ClipContext._clipAndPaint (package:flutter/src/painting/clip.dart:25:12)
#17     ClipContext.clipRectAndPaint (package:flutter/src/painting/clip.dart:53:5)
#18     PaintingContext.pushClipRect (package:flutter/src/rendering/object.dart:535:7)
#19     RenderClipRect.paint (package:flutter/src/rendering/proxy_box.dart:1530:25)
#20     RenderObject._paintWithContext (package:flutter/src/rendering/object.dart:3155:7)
#21     PaintingContext.paintChild (package:flutter/src/rendering/object.dart:252:13)
#22     _RenderLayoutBuilder.paint (package:flutter/src/widgets/layout_builder.dart:338:15)
#23     RenderObject._paintWithContext (package:flutter/src/rendering/object.dart:3155:7)
#24     PaintingContext.paintChild (package:flutter/src/rendering/object.dart:252:13)
#25     RenderProxyBoxMixin.paint (package:flutter/src/rendering/proxy_box.dart:129:13)
#26     RenderObject._paintWithContext (package:flutter/src/rendering/object.dart:3155:7)
#27     PaintingContext.paintChild (package:flutter/src/rendering/object.dart:252:13)
#28     RenderBoxContainerDefaultsMixin.defaultPaint (package:flutter/src/rendering/box.dart:2875:15)
#29     RenderStack.paintStack (package:flutter/src/rendering/stack.dart:639:5)
#30     RenderStack.paint (package:flutter/src/rendering/stack.dart:655:7)
#31     RenderObject._paintWithContext (package:flutter/src/rendering/object.dart:3155:7)
#32     PaintingContext.paintChild (package:flutter/src/rendering/object.dart:252:13)
#33     RenderProxyBoxMixin.paint (package:flutter/src/rendering/proxy_box.dart:129:13)
#34     RenderObject._paintWithContext (package:flutter/src/rendering/object.dart:3155:7)
#35     PaintingContext.paintChild (package:flutter/src/rendering/object.dart:252:13)
#36     RenderProxyBoxMixin.paint (package:flutter/src/rendering/proxy_box.dart:129:13)
#37     _RenderInkFeatures.paint (package:flutter/src/material/material.dart:664:11)
#38     RenderObject._paintWithContext (package:flutter/src/rendering/object.dart:3155:7)
#39     PaintingContext.paintChild (package:flutter/src/rendering/object.dart:252:13)
#40     RenderProxyBoxMixin.paint (package:flutter/src/rendering/proxy_box.dart:129:13)
#41     RenderPhysicalModel.paint.<anonymous closure> (package:flutter/src/rendering/proxy_box.dart:2049:15)
#42     PaintingContext.pushClipRRect (package:flutter/src/rendering/object.dart:561:14)
#43     RenderPhysicalModel.paint (package:flutter/src/rendering/proxy_box.dart:2036:21)
#44     RenderObject._paintWithContext (package:flutter/src/rendering/object.dart:3155:7)
#45     PaintingContext.paintChild (package:flutter/src/rendering/object.dart:252:13)
#46     RenderProxyBoxMixin.paint (package:flutter/src/rendering/proxy_box.dart:129:13)
#47     PaintingContext.pushLayer (package:flutter/src/rendering/object.dart:472:12)
#48     RenderAnnotatedRegion.paint (package:flutter/src/rendering/proxy_box.dart:5045:13)
#49     RenderObject._paintWithContext (package:flutter/src/rendering/object.dart:3155:7)
#50     PaintingContext.paintChild (package:flutter/src/rendering/object.dart:252:13)
#51     RenderProxyBoxMixin.paint (package:flutter/src/rendering/proxy_box.dart:129:13)
#52     RenderObject._paintWithContext (package:flutter/src/rendering/object.dart:3155:7)
#53     PaintingContext.paintChild (package:flutter/src/rendering/object.dart:252:13)
#54     RenderSliverPersistentHeader.paint (package:flutter/src/rendering/sliver_persistent_header.dart:311:15)
#55     RenderObject._paintWithContext (package:flutter/src/rendering/object.dart:3155:7)
#56     PaintingContext.paintChild (package:flutter/src/rendering/object.dart:252:13)
#57     RenderSliverOverlapAbsorber.paint (package:flutter/src/widgets/nested_scroll_view.dart:1827:15)
#58     RenderObject._paintWithContext (package:flutter/src/rendering/object.dart:3155:7)
#59     PaintingContext.paintChild (package:flutter/src/rendering/object.dart:252:13)
#60     RenderViewportBase._paintContents (package:flutter/src/rendering/viewport.dart:690:17)
#61     PaintingContext.pushLayer (package:flutter/src/rendering/object.dart:472:12)
#62     PaintingContext.pushClipRect (package:flutter/src/rendering/object.dart:532:7)
#63     RenderViewportBase.paint (package:flutter/src/rendering/viewport.dart:665:38)
#64     RenderObject._paintWithContext (package:flutter/src/rendering/object.dart:3155:7)
#65     PaintingContext._repaintCompositedChild (package:flutter/src/rendering/object.dart:168:11)
#66     PaintingContext.repaintCompositedChild (package:flutter/src/rendering/object.dart:111:5)
#67     PipelineOwner.flushPaint (package:flutter/src/rendering/object.dart:1144:31)
#68     RendererBinding.drawFrame (package:flutter/src/rendering/binding.dart:496:19)
#69     WidgetsBinding.drawFrame (package:flutter/src/widgets/binding.dart:918:13)
#70     RendererBinding._handlePersistentFrameCallback (package:flutter/src/rendering/binding.dart:360:5)
#71     SchedulerBinding._invokeFrameCallback (package:flutter/src/scheduler/binding.dart:1297:15)
#72     SchedulerBinding.handleDrawFrame (package:flutter/src/scheduler/binding.dart:1227:9)
#73     SchedulerBinding._handleDrawFrame (package:flutter/src/scheduler/binding.dart:1085:5)
#74     _invoke (dart:ui/hooks.dart:170:13)
#75     PlatformDispatcher._drawFrame (dart:ui/platform_dispatcher.dart:401:5)
#76     _drawFrame (dart:ui/hooks.dart:140:31)
(elided 2 frames from class _AssertionError)
The following RenderObject was being processed when the exception was fired: _RenderFlexibleSpaceHeaderOpacity#07433
...  parentData: top=-39.5; right=0.0; left=0.0; height=295.5; offset=Offset(0.0, -39.5) (can use size)
...  constraints: BoxConstraints(w=345.6, h=295.5)
...  layer: OpacityLayer#dd7ac DETACHED
...    engine layer: OpacityEngineLayer#091af
...    handles: 2
...    offset: Offset(0.0, -30.9)
...    alpha: 156
...  size: Size(345.6, 295.5)
...  opacity: 0.0
...  alwaysIncludeSemantics
RenderObject: _RenderFlexibleSpaceHeaderOpacity#07433
  parentData: top=-39.5; right=0.0; left=0.0; height=295.5; offset=Offset(0.0, -39.5) (can use size)
  constraints: BoxConstraints(w=345.6, h=295.5)
  layer: OpacityLayer#dd7ac DETACHED
    engine layer: OpacityEngineLayer#091af
    handles: 2
    offset: Offset(0.0, -30.9)
    alpha: 156
  size: Size(345.6, 295.5)
  opacity: 0.0
  alwaysIncludeSemantics

Flutter Doctor output

Doctor output
Doctor summary (to see all details, run flutter doctor -v):
[√] Flutter (Channel beta, 3.13.0-0.3.pre, on Microsoft Windows [Version 10.0.22621.2283], locale en-IL)
[√] Windows Version (Installed version of Windows is version 10 or higher)
[√] Android toolchain - develop for Android devices (Android SDK version 32.0.0)
[√] Chrome - develop for the web
[√] Visual Studio - develop Windows apps (Visual Studio Community 2022 17.5.5)
[√] Android Studio (version 4.1)
[√] Android Studio (version 2021.2)
[√] Android Studio (version 2023.1)
[√] VS Code (version 1.82.2)
[√] Connected device (4 available)
[√] Network resources

• No issues found!

Metadata

Metadata

Assignees

Labels

P2Important issues not at the top of the work lista: error messageError messages from the Flutter frameworkf: material designflutter/packages/flutter/material repository.f: scrollingViewports, list views, slivers, etc.found in release: 3.13Found to occur in 3.13found in release: 3.16Found to occur in 3.16frameworkflutter/packages/flutter repository. See also f: labels.has reproducible stepsThe issue has been confirmed reproducible and is ready to work onr: fixedIssue is closed as already fixed in a newer versionteam-designOwned by Design Languages teamtriaged-designTriaged by Design Languages team

Type

No type

Projects

Status

Done (PR merged)

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions