Skip to content

MultiSliver: dynamic SliverList + other sliver afterwards causes assertion error #97

@plammens

Description

@plammens

In a MultiSliver, adding a sliver after a SliverList.builder with no itemCount causes the following assertion error in the Flutter framework:

SemanticsNode#4684(Rect.fromLTRB(193.8, 906.3, 217.6, 926.3), tags: [RenderViewport.twoPane], flags: [isHidden], HIDDEN, label: "end", textDirection: ltr) (with SemanticsOwner#a54a2) tried to set a non-finite rect.
'package:flutter/src/semantics/semantics.dart':
Failed assertion: line 1851 pos 12: 'value.isFinite'

Full error with trace:

Details
======== Exception caught by scheduler library =====================================================
The following assertion was thrown during a scheduler callback:
SemanticsNode#4684(Rect.fromLTRB(193.8, 906.3, 217.6, 926.3), tags: [RenderViewport.twoPane], flags: [isHidden], HIDDEN, label: "end", textDirection: ltr) (with SemanticsOwner#a54a2) tried to set a non-finite rect.
'package:flutter/src/semantics/semantics.dart':
Failed assertion: line 1851 pos 12: 'value.isFinite'


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

When the exception was thrown, this was the stack: 
#2      SemanticsNode.rect= (package:flutter/src/semantics/semantics.dart:1851:12)
#3      _SwitchableSemanticsFragment.compileChildren (package:flutter/src/rendering/object.dart:5023:11)
#4      _SwitchableSemanticsFragment.compileChildren (package:flutter/src/rendering/object.dart:4988:18)
#5      _SwitchableSemanticsFragment.compileChildren (package:flutter/src/rendering/object.dart:5051:16)
#6      _SwitchableSemanticsFragment.compileChildren (package:flutter/src/rendering/object.dart:5051:16)
#7      _SwitchableSemanticsFragment.compileChildren (package:flutter/src/rendering/object.dart:5051:16)
#8      _SwitchableSemanticsFragment.compileChildren (package:flutter/src/rendering/object.dart:4988:18)
#9      _SwitchableSemanticsFragment.compileChildren (package:flutter/src/rendering/object.dart:4988:18)
#10     _SwitchableSemanticsFragment.compileChildren (package:flutter/src/rendering/object.dart:4988:18)
#11     _SwitchableSemanticsFragment.compileChildren (package:flutter/src/rendering/object.dart:4988:18)
#12     _SwitchableSemanticsFragment.compileChildren (package:flutter/src/rendering/object.dart:5051:16)
#13     _RootSemanticsFragment.compileChildren (package:flutter/src/rendering/object.dart:4766:16)
#14     RenderObject._updateSemantics (package:flutter/src/rendering/object.dart:3730:25)
#15     PipelineOwner.flushSemantics (package:flutter/src/rendering/object.dart:1313:16)
#16     PipelineOwner.flushSemantics (package:flutter/src/rendering/object.dart:1318:15)
#17     RendererBinding.drawFrame (package:flutter/src/rendering/binding.dart:616:25)
#18     WidgetsBinding.drawFrame (package:flutter/src/widgets/binding.dart:1178:13)
#19     RendererBinding._handlePersistentFrameCallback (package:flutter/src/rendering/binding.dart:475:5)
#20     SchedulerBinding._invokeFrameCallback (package:flutter/src/scheduler/binding.dart:1397:15)
#21     SchedulerBinding.handleDrawFrame (package:flutter/src/scheduler/binding.dart:1318:9)
#22     SchedulerBinding._handleDrawFrame (package:flutter/src/scheduler/binding.dart:1176:5)
#23     _invoke (dart:ui/hooks.dart:312:13)
#24     PlatformDispatcher._drawFrame (dart:ui/platform_dispatcher.dart:419:5)
#25     _drawFrame (dart:ui/hooks.dart:283:31)
(elided 2 frames from class _AssertionError)
====================================================================================================

Minimal reproducible example:

import 'package:flutter/material.dart';
import 'package:sliver_tools/sliver_tools.dart';

void main() {
  runApp(const MyApp());
}

class MyApp extends StatelessWidget {
  const MyApp({super.key});

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        body: CustomScrollView(slivers: [
          MultiSliver(children: [
            SliverList.builder(
              itemBuilder: (context, index) =>
                  index < 100 ? Text(index.toString()) : null,
            ),
            const SliverToBoxAdapter(child: Text("end of list")),
          ]),
        ]),
      ),
    );
  }
}

Output of flutter doctor -v

Details
[√] Flutter (Channel master, 3.24.0-1.0.pre.592, on Microsoft Windows [Version 10.0.22631.4169], locale en-GB)
    • Flutter version 3.24.0-1.0.pre.592 on channel master at C:\flutter
    • Upstream repository https://github.com/flutter/flutter.git
    • Framework revision 99f00a1309 (5 weeks ago), 2024-08-15 03:00:25 -0400
    • Engine revision 971ddd9fe1
    • Dart version 3.6.0 (build 3.6.0-146.0.dev)
    • DevTools version 2.38.0

[√] Windows Version (Installed version of Windows is version 10 or higher)

[√] Android toolchain - develop for Android devices (Android SDK version 34.0.0)
    • Android SDK at C:\Users\Paolo\AppData\Local\Android\sdk
    • Platform android-34, build-tools 34.0.0
    • Java binary at: C:\Users\Paolo\AppData\Local\Programs\Android Studio\jbr\bin\java
    • Java version OpenJDK Runtime Environment (build 17.0.7+0-b2043.56-10550314)
    • All Android licenses accepted.

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

[√] Visual Studio - develop Windows apps (Visual Studio Community 2019 16.11.18)
    • Visual Studio at C:\Program Files (x86)\Microsoft Visual Studio\2019\Community
    • Visual Studio Community 2019 version 16.11.32802.440
    • Windows 10 SDK version 10.0.17763.0

[√] Android Studio (version 2023.1)
    • Android Studio at C:\Users\Paolo\AppData\Local\Programs\Android Studio
    • Flutter plugin can be installed from:
       https://plugins.jetbrains.com/plugin/9212-flutter
    • Dart plugin can be installed from:
       https://plugins.jetbrains.com/plugin/6351-dart
    • Java version OpenJDK Runtime Environment (build 17.0.7+0-b2043.56-10550314)

[√] IntelliJ IDEA Ultimate Edition (version 2023.3)
    • IntelliJ at C:\Users\Paolo\AppData\Local\Programs\IntelliJ IDEA Ultimate
    • Flutter plugin version 81.0.1
    • Dart plugin version 233.15271

[√] Connected device (4 available)
    • Pixel 6a (mobile) • 35061JEGR06936 • android-arm64  • Android 14 (API 34)
    • Windows (desktop) • windows        • windows-x64    • Microsoft Windows [Version 10.0.22631.4169]
    • Chrome (web)      • chrome         • web-javascript • Google Chrome 128.0.6613.138
    • Edge (web)        • edge           • web-javascript • Microsoft Edge 129.0.2792.52

[√] Network resources
    • All expected network resources are available.

• No issues found!

Dependencies

Details
Dart SDK 3.6.0-146.0.dev
Flutter SDK 3.24.0-1.0.pre.592
sandbox 1.0.0+1
|-- flutter 0.0.0
|   |-- characters 1.3.0
|   |-- collection 1.19.0
|   |-- material_color_utilities 0.11.1
|   |   '-- collection...
|   |-- meta 1.15.0
|   |-- sky_engine 0.0.99
|   '-- vector_math 2.1.4
|-- flutter_launcher_icons 0.12.0
|   |-- args 2.4.0
|   |-- checked_yaml 2.0.2
|   |   |-- json_annotation...
|   |   |-- source_span...
|   |   '-- yaml...
|   |-- cli_util 0.3.5
|   |   |-- meta...
|   |   '-- path...
|   |-- image 4.0.15
|   |   |-- archive 3.3.6
|   |   |   |-- crypto 3.0.5
|   |   |   |   '-- typed_data 1.3.1
|   |   |   |       '-- collection...
|   |   |   |-- pointycastle 3.6.2
|   |   |   |   |-- convert 3.1.1
|   |   |   |   |   '-- typed_data...
|   |   |   |   |-- js 0.6.5
|   |   |   |   |   '-- meta...
|   |   |   |   '-- collection...
|   |   |   '-- path...
|   |   |-- xml 6.5.0
|   |   |   |-- petitparser 6.0.2
|   |   |   |   '-- meta...
|   |   |   |-- collection...
|   |   |   '-- meta...
|   |   '-- meta...
|   |-- json_annotation 4.8.0
|   |   '-- meta...
|   |-- yaml 3.1.1
|   |   |-- collection...
|   |   |-- source_span...
|   |   '-- string_scanner...
|   '-- path...
|-- flutter_lints 2.0.1
|   '-- lints 2.0.1
|-- flutter_test 0.0.0
|   |-- async 2.11.0
|   |   |-- collection...
|   |   '-- meta...
|   |-- boolean_selector 2.1.1
|   |   |-- source_span...
|   |   '-- string_scanner...
|   |-- clock 1.1.1
|   |-- fake_async 1.3.1
|   |   |-- clock...
|   |   '-- collection...
|   |-- leak_tracker 10.0.5
|   |   |-- clock...
|   |   |-- collection...
|   |   |-- meta...
|   |   |-- path...
|   |   '-- vm_service...
|   |-- leak_tracker_flutter_testing 3.0.5
|   |   |-- flutter...
|   |   |-- leak_tracker...
|   |   |-- leak_tracker_testing...
|   |   |-- matcher...
|   |   '-- meta...
|   |-- leak_tracker_testing 3.0.1
|   |   |-- leak_tracker...
|   |   |-- matcher...
|   |   '-- meta...
|   |-- matcher 0.12.16+1
|   |   |-- async...
|   |   |-- meta...
|   |   |-- stack_trace...
|   |   |-- term_glyph...
|   |   '-- test_api...
|   |-- path 1.9.0
|   |-- source_span 1.10.0
|   |   |-- collection...
|   |   |-- path...
|   |   '-- term_glyph...
|   |-- stack_trace 1.11.1
|   |   '-- path...
|   |-- stream_channel 2.1.2
|   |   '-- async...
|   |-- string_scanner 1.3.0
|   |   '-- source_span...
|   |-- term_glyph 1.2.1
|   |-- test_api 0.7.3
|   |   |-- async...
|   |   |-- boolean_selector...
|   |   |-- collection...
|   |   |-- meta...
|   |   |-- source_span...
|   |   |-- stack_trace...
|   |   |-- stream_channel...
|   |   |-- string_scanner...
|   |   '-- term_glyph...
|   |-- vm_service 14.2.4
|   |-- characters...
|   |-- collection...
|   |-- flutter...
|   |-- material_color_utilities...
|   |-- meta...
|   '-- vector_math...
'-- sliver_tools 0.2.12
    '-- flutter...

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions