Skip to content

NestedScrollView failed assertion 'extra >= 0.0': is not true on short ballistic drags with BouncingScrollPhysics #79062

@nt4f04uNd

Description

@nt4f04uNd

refer to the title
this might be tough to reproduce, but this happens regularly to me

logs

══╡ EXCEPTION CAUGHT BY RENDERING LIBRARY ╞═════════════════════════════════════════════════════════
The following assertion was thrown during performLayout():
'package:flutter/src/widgets/nested_scroll_view.dart': Failed assertion: line 955 pos 16: 'extra >=
0.0': 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.md

The relevant error-causing widget was:
  CustomScrollView file:///C:/dev/projects/native/app/lib/main.dart:38:15

When the exception was thrown, this was the stack:
#2      _NestedScrollCoordinator._getMetrics (package:flutter/src/widgets/nested_scroll_view.dart:955:16)
#3      _NestedScrollCoordinator.createInnerBallisticScrollActivity (package:flutter/src/widgets/nested_scroll_view.dart:923:9)
#4      _NestedInnerBallisticScrollActivity.applyNewDimensions (package:flutter/src/widgets/nested_scroll_view.dart:1632:40)
#5      ScrollPosition.applyNewDimensions (package:flutter/src/widgets/scroll_position.dart:593:15)
#6      _NestedScrollPosition.applyNewDimensions (package:flutter/src/widgets/nested_scroll_view.dart:1582:11)
#7      ScrollPosition.applyContentDimensions (package:flutter/src/widgets/scroll_position.dart:533:7)
#8      RenderViewport.performLayout (package:flutter/src/rendering/viewport.dart:1481:20)
#9      RenderObject.layout (package:flutter/src/rendering/object.dart:1783:7)
#10     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:117:14)
#11     RenderObject.layout (package:flutter/src/rendering/object.dart:1783:7)
#12     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:117:14)
#13     RenderObject.layout (package:flutter/src/rendering/object.dart:1783:7)
#14     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:117:14)
#15     RenderObject.layout (package:flutter/src/rendering/object.dart:1783:7)
#16     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:117:14)
#17     RenderObject.layout (package:flutter/src/rendering/object.dart:1783:7)
#18     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:117:14)
#19     RenderObject.layout (package:flutter/src/rendering/object.dart:1783:7)
#20     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:117:14)
#21     RenderObject.layout (package:flutter/src/rendering/object.dart:1783:7)
#22     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:117:14)
#23     RenderObject.layout (package:flutter/src/rendering/object.dart:1783:7)
#24     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:117:14)
#25     RenderCustomPaint.performLayout (package:flutter/src/rendering/custom_paint.dart:545:11)
#26     RenderObject.layout (package:flutter/src/rendering/object.dart:1783:7)
#27     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:117:14)
#28     RenderObject.layout (package:flutter/src/rendering/object.dart:1783:7)
#29     RenderSliverFillRemainingWithScrollable.performLayout (package:flutter/src/rendering/sliver_fill.dart:92:14)
#30     RenderObject.layout (package:flutter/src/rendering/object.dart:1783:7)
#31     RenderViewportBase.layoutChildSequence (package:flutter/src/rendering/viewport.dart:510:13)
#32     RenderViewport._attemptLayout (package:flutter/src/rendering/viewport.dart:1568:12)
#33     RenderViewport.performLayout (package:flutter/src/rendering/viewport.dart:1477:20)
#34     RenderObject._layoutWithoutResize (package:flutter/src/rendering/object.dart:1640:7)
#35     PipelineOwner.flushLayout (package:flutter/src/rendering/object.dart:883:18)
#36     RendererBinding.drawFrame (package:flutter/src/rendering/binding.dart:463:19)
#37     WidgetsBinding.drawFrame (package:flutter/src/widgets/binding.dart:876:13)
#38     RendererBinding._handlePersistentFrameCallback (package:flutter/src/rendering/binding.dart:329:5)
#39     SchedulerBinding._invokeFrameCallback (package:flutter/src/scheduler/binding.dart:1144:15)
#40     SchedulerBinding.handleDrawFrame (package:flutter/src/scheduler/binding.dart:1082:9)
#41     SchedulerBinding._handleDrawFrame (package:flutter/src/scheduler/binding.dart:998:5)
#45     _invoke (dart:ui/hooks.dart:167:10)
#46     PlatformDispatcher._drawFrame (dart:ui/platform_dispatcher.dart:259:5)
#47     _drawFrame (dart:ui/hooks.dart:126:31)
(elided 5 frames from class _AssertionError and dart:async)

The following RenderObject was being processed when the exception was fired: RenderViewport#8d4d5 NEEDS-LAYOUT NEEDS-PAINT:
  needs compositing
  creator: Viewport ← IgnorePointer-[GlobalKey#8e496] ← Semantics ← Listener ← _GestureSemantics ←
    RawGestureDetector-[LabeledGlobalKey<RawGestureDetectorState>#6162d] ← Listener ← _ScrollableScope
    ← _ScrollSemantics-[GlobalKey#a8ea3] ← RepaintBoundary ← CustomPaint ← RepaintBoundary ← ⋯
  parentData: <none> (can use size)
  constraints: BoxConstraints(w=392.7, h=759.3)
  layer: OffsetLayer#9b2cc
  size: Size(392.7, 759.3)
  axisDirection: down
  crossAxisDirection: right
  offset: _NestedScrollPosition#cd132(inner, offset: 288.1, range: 0.0..696.7, viewport: 759.3)
  anchor: 0.0
This RenderObject had the following descendants (showing up to depth 5):
    center child: RenderSliverPadding#9783c relayoutBoundary=up1 NEEDS-PAINT NEEDS-COMPOSITING-BITS-UPDATE
      child: RenderSliverFixedExtentList#09dbb relayoutBoundary=up2 NEEDS-PAINT NEEDS-COMPOSITING-BITS-UPDATE
        child with index 0: RenderIndexedSemantics#43b1d
          child: RenderRepaintBoundary#5480e
            child: RenderSemanticsAnnotations#12f12
        child with index 1: RenderIndexedSemantics#fb196
          child: RenderRepaintBoundary#595b8
            child: RenderSemanticsAnnotations#59ef1
        child with index 2: RenderIndexedSemantics#177ae
          child: RenderRepaintBoundary#716a3
            child: RenderSemanticsAnnotations#72eab
        child with index 3: RenderIndexedSemantics#07a0b
          child: RenderRepaintBoundary#45d20
            child: RenderSemanticsAnnotations#75959
        child with index 4: RenderIndexedSemantics#259c4
          child: RenderRepaintBoundary#58c72
            child: RenderSemanticsAnnotations#f129e
        child with index 5: RenderIndexedSemantics#b63bf
          child: RenderRepaintBoundary#21d77
            child: RenderSemanticsAnnotations#d49db
        child with index 6: RenderIndexedSemantics#cd32c
          child: RenderRepaintBoundary#b1e94
            child: RenderSemanticsAnnotations#2d14b
        child with index 7: RenderIndexedSemantics#a2e3a
          child: RenderRepaintBoundary#6ed9c
            child: RenderSemanticsAnnotations#c0b2d
        child with index 8: RenderIndexedSemantics#a5f8b
          child: RenderRepaintBoundary#71721
            child: RenderSemanticsAnnotations#32893
════════════════════════════════════════════════════════════════════════════════════════════════════
code sample
import 'package:flutter/material.dart';

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
  static const String _title = 'Flutter Code Sample';

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: _title,
      home: NestedScrollViewExample(),
      // home: CustomScrollViewExample(),
    );
  }
}

class NestedScrollViewExample extends StatelessWidget {
  NestedScrollViewExample({Key key}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: NestedScrollView(
        floatHeaderSlivers: true,
        physics: BouncingScrollPhysics(),
        headerSliverBuilder: (context, innerBoxIsScrolled) => [
          SliverAppBar(
            floating: true,
            expandedHeight: 250.0,
            elevation: 0.0,
            forceElevated: false,
            flexibleSpace: FlexibleSpaceBar(
              title: Text('Demo'),
            ),
          ),
        ],
        body: CustomScrollView(
          slivers: <Widget>[
            SliverPadding(
              padding: const EdgeInsets.all(8.0),
              sliver: SliverFixedExtentList(
                itemExtent: 48.0,
                delegate: SliverChildBuilderDelegate(
                  (BuildContext context, int index) {
                    return ListTile(
                      title: Text('Item $index'),
                    );
                  },
                  childCount: 30,
                ),
              ),
            ),
          ],
        ),
      ),
    );
  }
}
flutter doctor -v
[✓] Flutter (Channel master, 2.1.0-13.0.pre.223, on Microsoft Windows [Version 10.0.19041.867], locale ru-RU)
    • Flutter version 2.1.0-13.0.pre.223 at c:\dev\src\flutter
    • Framework revision 891511d58f (2 days ago), 2021-03-23 14:57:01 -0700
    • Engine revision d59a01d2d3
    • Dart version 2.13.0 (build 2.13.0-150.0.dev)

[✓] Android toolchain - develop for Android devices (Android SDK version 30.0.2)
    • Android SDK at C:\Users\danya\AppData\Local\Android\sdk
    • Platform android-30, build-tools 30.0.2
    • Java binary at: C:\Program Files\Android\Android Studio\jre\bin\java
    • Java version OpenJDK Runtime Environment (build 1.8.0_242-release-1644-b01)
    • All Android licenses accepted.

[✓] Chrome - develop for the web
    • Chrome at C:\Program Files\Google\Chrome\Application\chrome.exe

[✓] Visual Studio - develop for Windows (Visual Studio Community 2019 16.7.7)
    • Visual Studio at C:\Program Files (x86)\Microsoft Visual Studio\2019\Community
    • Visual Studio Community 2019 version 16.7.30621.155
    • Windows 10 SDK version 10.0.18362.0

[✓] Android Studio (version 4.0)
    • Android Studio at C:\Program Files\Android\Android Studio
    • Flutter plugin version 50.0.1
    • Dart plugin version 193.7547
    • Java version OpenJDK Runtime Environment (build 1.8.0_242-release-1644-b01)

[✓] VS Code (version 1.54.3)
    • VS Code at C:\Users\danya\AppData\Local\Programs\Microsoft VS Code
    • Flutter extension version 3.20.0

[✓] Connected device (5 available)
    • Redmi Note 5 (mobile)   • 40c9f14       • android-arm64  • Android 9 (API 28)
    • sdk gphone x86 (mobile) • emulator-5554 • android-x86    • Android 11 (API 30) (emulator)
    • Windows (desktop)       • windows       • windows-x64    • Microsoft Windows [Version 10.0.19041.867]
    • Chrome (web)            • chrome        • web-javascript • Google Chrome 89.0.4389.90
    • Edge (web)              • edge          • web-javascript • Microsoft Edge 89.0.774.57

• No issues found!
video.mp4

Metadata

Metadata

Assignees

No one assigned

    Labels

    f: scrollingViewports, list views, slivers, etc.frameworkflutter/packages/flutter repository. See also f: labels.r: invalidIssue is closed as not valid

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions