Skip to content

SplitPane: RangeError when rebuilding with a different number of children #9648

@rrousselGit

Description

@rrousselGit

Here's extracted code from my devtool extension:

SplitPane(
  axis: .vertical,
  initialFractions: [
    state.fraction,
    ?notifier?.fraction,
    terminal.fraction,
  ],
  minSizes: [state.minSize, ?notifier?.minSize, terminal.minSize],
  splitters: [if (notifier != null) notifier.heading, terminal.heading],
  children: [state.content, ?notifier?.content, terminal.content],
),

When notifier changes between != null and null, the following error is thrown:

══╡ EXCEPTION CAUGHT BY WIDGETS LIBRARY ╞═══════════════════════════════════════════════════════════
The following IndexError was thrown building LayoutBuilder:
RangeError (index): Index out of range: index should be less than 2: 2

The relevant error-causing widget was:
  SplitPane
  SplitPane:file:///Users/remirousselet/dev/rrousselGit/riverpod/packages/riverpod_devtool/lib/src/frame_view.dart:189:14

When the exception was thrown, this was the stack:
dart-sdk/lib/_internal/js_dev_runtime/private/ddc_runtime/errors.dart 274:3       throw_
errors.dart:274
dart-sdk/lib/_internal/js_dev_runtime/private/js_array.dart 608:7                 _get]
js_array.dart:608
package:devtools_app_shared/src/ui/split_pane.dart 126:20                         minSizeForIndex
split_pane.dart:126
package:devtools_app_shared/src/ui/split_pane.dart 130:9                          minFractionForIndex
split_pane.dart:130
package:devtools_app_shared/src/ui/split_pane.dart 143:28                         deltaFromMinimumSize
split_pane.dart:143
package:devtools_app_shared/src/ui/split_pane.dart 146:21                         [_buildLayout]
split_pane.dart:146
dart-sdk/lib/_internal/js_dev_runtime/private/ddc_runtime/operations.dart 118:77  tear
operations.dart:118
package:flutter/src/widgets/layout_builder.dart 232:67                            updateChildCallback
layout_builder.dart:232
package:flutter/src/widgets/framework.dart 3101:11                                buildScope
framework.dart:3101
package:flutter/src/widgets/layout_builder.dart 270:5                             [_rebuildWithConstraints]
layout_builder.dart:270
dart-sdk/lib/_internal/js_dev_runtime/private/ddc_runtime/operations.dart 118:77  tear
operations.dart:118
package:flutter/src/widgets/layout_builder.dart 333:28                            layoutCallback
layout_builder.dart:333
package:flutter/src/rendering/object.dart 4162:33                                 <fn>
object.dart:4162
package:flutter/src/rendering/object.dart 2887:9                                  <fn>
object.dart:2887
package:flutter/src/rendering/object.dart 1223:7                                  [_enableMutationsToDirtySubtrees]
object.dart:1223
package:flutter/src/rendering/object.dart 2886:7                                  invokeLayoutCallback
object.dart:2886
package:flutter/src/rendering/object.dart 4162:5                                  runLayoutCallback
object.dart:4162
package:flutter/src/widgets/layout_builder.dart 447:5                             performLayout
layout_builder.dart:447
package:flutter/src/rendering/object.dart 2616:7                                  [_layoutWithoutResize]
object.dart:2616
package:flutter/src/rendering/object.dart 1174:17                                 flushLayout
object.dart:1174
package:flutter/src/rendering/object.dart 1187:14                                 flushLayout
object.dart:1187
package:flutter/src/rendering/binding.dart 629:5                                  drawFrame
binding.dart:629
package:flutter/src/widgets/binding.dart 1269:13                                  drawFrame
binding.dart:1269
package:flutter/src/rendering/binding.dart 495:5                                  [_handlePersistentFrameCallback]
binding.dart:495
dart-sdk/lib/_internal/js_dev_runtime/private/ddc_runtime/operations.dart 118:77  tear
operations.dart:118
package:flutter/src/scheduler/binding.dart 1430:7                                 [_invokeFrameCallback]
binding.dart:1430
package:flutter/src/scheduler/binding.dart 1345:9                                 handleDrawFrame
binding.dart:1345
package:flutter/src/scheduler/binding.dart 1198:5                                 [_handleDrawFrame]
binding.dart:1198
dart-sdk/lib/_internal/js_dev_runtime/private/ddc_runtime/operations.dart 118:77  tear
operations.dart:118
lib/_engine/engine/platform_dispatcher.dart 1700:5                                invoke
platform_dispatcher.dart:1700
lib/_engine/engine/platform_dispatcher.dart 268:5                                 invokeOnDrawFrame
platform_dispatcher.dart:268
lib/_engine/engine/frame_service.dart 209:32                                      [_renderFrame]
frame_service.dart:209
lib/_engine/engine/frame_service.dart 117:9                                       <fn>
frame_service.dart:117
dart-sdk/lib/async/zone_root.dart 56:13                                           _rootRunUnary
zone_root.dart:56
dart-sdk/lib/_internal/js_dev_runtime/private/ddc_runtime/operations.dart 118:77  tear
operations.dart:118
dart-sdk/lib/async/zone.dart 733:19                                               runUnary
zone.dart:733
dart-sdk/lib/async/zone.dart 654:26                                               <fn>
zone.dart:654
dart-sdk/lib/_internal/js_dev_runtime/patch/js_allow_interop_patch.dart 224:27    _callDartFunctionFast1
js_allow_interop_patch.dart:224
dart-sdk/lib/_internal/js_dev_runtime/patch/js_allow_interop_patch.dart 84:15     ret
js_allow_interop_patch.dart:84

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