superlistapp / super_editor

A Flutter toolkit for building document editors and readers
https://superlist.com/SuperEditor/
MIT License
1.64k stars 239 forks source link

[BUG] - [DemoApp] Toggling debug info crashes the editor #2254

Open angelosilvestre opened 3 weeks ago

angelosilvestre commented 3 weeks ago

Package Version Latest main

To Reproduce Steps to reproduce the behavior:

  1. Run the example app
  2. Click on the debug visuals toggle

Actual behavior The editor crashes with the following exception:

Restarted application in 333ms.

════════ Exception caught by widgets library ═══════════════════════════════════
The following assertion was thrown building AnimatedBuilder(listenable: ValueNotifier<TextInputConnection?>#99375(null), state: _AnimatedState#b3bd8):
A RenderViewport expected a child of type RenderSliver but received a child of type RenderStack.
RenderObjects expect specific types of children because they coordinate with their children during layout and paint. For example, a RenderSliver cannot be the child of a RenderBox because a RenderSliver does not understand the RenderBox layout protocol.

The RenderViewport that expected a RenderSliver child was created by: Viewport ← IgnorePointer-[GlobalKey#552d6] ← Semantics ← Listener ← _GestureSemantics ← RawGestureDetector-[LabeledGlobalKey<RawGestureDetectorState>#66afa] ← Listener ← _ScrollableScope ← _ScrollSemantics-[GlobalKey#7f3c6] ← NotificationListener<ScrollMetricsNotification> ← Scrollable ← CustomScrollView ← ⋯

The RenderStack that did not match the expected child type was created by: Stack ← AnimatedBuilder ← SuperEditorImeDebugVisuals ← SuperEditorImeInteractor ← Viewport ← IgnorePointer-[GlobalKey#552d6] ← Semantics ← Listener ← _GestureSemantics ← RawGestureDetector-[LabeledGlobalKey<RawGestureDetectorState>#66afa] ← Listener ← _ScrollableScope ← ⋯

The relevant error-causing widget was:
    AnimatedBuilder AnimatedBuilder:file:///Users/angelosilvestre/dev/super_editor/super_editor/lib/src/default_editor/debug_visualization.dart:108:12

When the exception was thrown, this was the stack:
#0      ContainerRenderObjectMixin.debugValidateChild.<anonymous closure> (package:flutter/src/rendering/object.dart:4239:9)
#1      ContainerRenderObjectMixin.debugValidateChild (package:flutter/src/rendering/object.dart:4266:6)
#2      MultiChildRenderObjectElement.insertRenderObjectChild (package:flutter/src/widgets/framework.dart:6973:25)
#3      _ViewportElement.insertRenderObjectChild (package:flutter/src/widgets/viewport.dart:266:11)
#4      RenderObjectElement.attachRenderObject (package:flutter/src/widgets/framework.dart:6732:35)
#5      RenderObjectElement.mount (package:flutter/src/widgets/framework.dart:6597:5)
#6      MultiChildRenderObjectElement.mount (package:flutter/src/widgets/framework.dart:7042:11)
...     Normal element mounting (23 frames)
#29     Element.inflateWidget (package:flutter/src/widgets/framework.dart:4468:16)
#30     MultiChildRenderObjectElement.inflateWidget (package:flutter/src/widgets/framework.dart:7035:36)
#31     MultiChildRenderObjectElement.mount (package:flutter/src/widgets/framework.dart:7047:32)
#32     _ViewportElement.mount (package:flutter/src/widgets/viewport.dart:225:11)
...     Normal element mounting (114 frames)
#146    Element.inflateWidget (package:flutter/src/widgets/framework.dart:4468:16)
#147    MultiChildRenderObjectElement.inflateWidget (package:flutter/src/widgets/framework.dart:7035:36)
#148    MultiChildRenderObjectElement.mount (package:flutter/src/widgets/framework.dart:7047:32)
...     Normal element mounting (36 frames)
#184    Element.inflateWidget (package:flutter/src/widgets/framework.dart:4468:16)
#185    Element.updateChild (package:flutter/src/widgets/framework.dart:3957:20)
#186    ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:5642:16)
#187    Element.rebuild (package:flutter/src/widgets/framework.dart:5333:7)
#188    StatelessElement.update (package:flutter/src/widgets/framework.dart:5693:5)
#189    Element.updateChild (package:flutter/src/widgets/framework.dart:3941:15)
#190    ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:5642:16)
#191    Element.rebuild (package:flutter/src/widgets/framework.dart:5333:7)
#192    StatelessElement.update (package:flutter/src/widgets/framework.dart:5693:5)
#193    Element.updateChild (package:flutter/src/widgets/framework.dart:3941:15)
#194    ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:5642:16)
#195    StatefulElement.performRebuild (package:flutter/src/widgets/framework.dart:5780:11)
#196    Element.rebuild (package:flutter/src/widgets/framework.dart:5333:7)
#197    StatefulElement.update (package:flutter/src/widgets/framework.dart:5803:5)
#198    Element.updateChild (package:flutter/src/widgets/framework.dart:3941:15)
#199    ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:5642:16)
#200    Element.rebuild (package:flutter/src/widgets/framework.dart:5333:7)
#201    ProxyElement.update (package:flutter/src/widgets/framework.dart:5946:5)
#202    Element.updateChild (package:flutter/src/widgets/framework.dart:3941:15)
#203    ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:5642:16)
#204    Element.rebuild (package:flutter/src/widgets/framework.dart:5333:7)
#205    StatelessElement.update (package:flutter/src/widgets/framework.dart:5693:5)
#206    Element.updateChild (package:flutter/src/widgets/framework.dart:3941:15)
#207    ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:5642:16)
#208    Element.rebuild (package:flutter/src/widgets/framework.dart:5333:7)
#209    ProxyElement.update (package:flutter/src/widgets/framework.dart:5946:5)
#210    Element.updateChild (package:flutter/src/widgets/framework.dart:3941:15)
#211    SingleChildRenderObjectElement.update (package:flutter/src/widgets/framework.dart:6907:14)
#212    Element.updateChild (package:flutter/src/widgets/framework.dart:3941:15)
#213    ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:5642:16)
#214    Element.rebuild (package:flutter/src/widgets/framework.dart:5333:7)
#215    ProxyElement.update (package:flutter/src/widgets/framework.dart:5946:5)
#216    Element.updateChild (package:flutter/src/widgets/framework.dart:3941:15)
#217    Element.updateChildren (package:flutter/src/widgets/framework.dart:4090:32)
#218    MultiChildRenderObjectElement.update (package:flutter/src/widgets/framework.dart:7060:17)
#219    Element.updateChild (package:flutter/src/widgets/framework.dart:3941:15)
#220    Element.updateChildren (package:flutter/src/widgets/framework.dart:4090:32)
#221    MultiChildRenderObjectElement.update (package:flutter/src/widgets/framework.dart:7060:17)
#222    Element.updateChild (package:flutter/src/widgets/framework.dart:3941:15)
#223    _OverlayPortalElement.update (package:flutter/src/widgets/overlay.dart:2091:14)
#224    Element.updateChild (package:flutter/src/widgets/framework.dart:3941:15)
#225    ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:5642:16)
#226    StatefulElement.performRebuild (package:flutter/src/widgets/framework.dart:5780:11)
#227    Element.rebuild (package:flutter/src/widgets/framework.dart:5333:7)
#228    StatefulElement.update (package:flutter/src/widgets/framework.dart:5803:5)
#229    Element.updateChild (package:flutter/src/widgets/framework.dart:3941:15)
#230    _OverlayPortalElement.update (package:flutter/src/widgets/overlay.dart:2091:14)
#231    Element.updateChild (package:flutter/src/widgets/framework.dart:3941:15)
#232    ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:5642:16)
#233    StatefulElement.performRebuild (package:flutter/src/widgets/framework.dart:5780:11)
#234    Element.rebuild (package:flutter/src/widgets/framework.dart:5333:7)
#235    StatefulElement.update (package:flutter/src/widgets/framework.dart:5803:5)
#236    Element.updateChild (package:flutter/src/widgets/framework.dart:3941:15)
#237    ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:5642:16)
#238    Element.rebuild (package:flutter/src/widgets/framework.dart:5333:7)
#239    StatelessElement.update (package:flutter/src/widgets/framework.dart:5693:5)
#240    Element.updateChild (package:flutter/src/widgets/framework.dart:3941:15)
#241    ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:5642:16)
#242    Element.rebuild (package:flutter/src/widgets/framework.dart:5333:7)
#243    ProxyElement.update (package:flutter/src/widgets/framework.dart:5946:5)
#244    Element.updateChild (package:flutter/src/widgets/framework.dart:3941:15)
#245    ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:5642:16)
#246    Element.rebuild (package:flutter/src/widgets/framework.dart:5333:7)
#247    ProxyElement.update (package:flutter/src/widgets/framework.dart:5946:5)
#248    Element.updateChild (package:flutter/src/widgets/framework.dart:3941:15)
#249    ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:5642:16)
#250    Element.rebuild (package:flutter/src/widgets/framework.dart:5333:7)
#251    ProxyElement.update (package:flutter/src/widgets/framework.dart:5946:5)
#252    Element.updateChild (package:flutter/src/widgets/framework.dart:3941:15)
#253    ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:5642:16)
#254    Element.rebuild (package:flutter/src/widgets/framework.dart:5333:7)
#255    ProxyElement.update (package:flutter/src/widgets/framework.dart:5946:5)
#256    Element.updateChild (package:flutter/src/widgets/framework.dart:3941:15)
#257    ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:5642:16)
#258    Element.rebuild (package:flutter/src/widgets/framework.dart:5333:7)
#259    StatelessElement.update (package:flutter/src/widgets/framework.dart:5693:5)
#260    Element.updateChild (package:flutter/src/widgets/framework.dart:3941:15)
#261    ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:5642:16)
#262    Element.rebuild (package:flutter/src/widgets/framework.dart:5333:7)
#263    ProxyElement.update (package:flutter/src/widgets/framework.dart:5946:5)
#264    Element.updateChild (package:flutter/src/widgets/framework.dart:3941:15)
#265    ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:5642:16)
#266    Element.rebuild (package:flutter/src/widgets/framework.dart:5333:7)
#267    StatelessElement.update (package:flutter/src/widgets/framework.dart:5693:5)
#268    Element.updateChild (package:flutter/src/widgets/framework.dart:3941:15)
#269    ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:5642:16)
#270    StatefulElement.performRebuild (package:flutter/src/widgets/framework.dart:5780:11)
#271    Element.rebuild (package:flutter/src/widgets/framework.dart:5333:7)
#272    StatefulElement.update (package:flutter/src/widgets/framework.dart:5803:5)
#273    Element.updateChild (package:flutter/src/widgets/framework.dart:3941:15)
#274    ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:5642:16)
#275    StatefulElement.performRebuild (package:flutter/src/widgets/framework.dart:5780:11)
#276    Element.rebuild (package:flutter/src/widgets/framework.dart:5333:7)
#277    BuildScope._tryRebuild (package:flutter/src/widgets/framework.dart:2693:15)
#278    BuildScope._flushDirtyElements (package:flutter/src/widgets/framework.dart:2752:11)
#279    BuildOwner.buildScope (package:flutter/src/widgets/framework.dart:3048:18)
#280    WidgetsBinding.drawFrame (package:flutter/src/widgets/binding.dart:1162:21)
#281    RendererBinding._handlePersistentFrameCallback (package:flutter/src/rendering/binding.dart:468:5)
#282    SchedulerBinding._invokeFrameCallback (package:flutter/src/scheduler/binding.dart:1397:15)
#283    SchedulerBinding.handleDrawFrame (package:flutter/src/scheduler/binding.dart:1318:9)
#284    SchedulerBinding._handleDrawFrame (package:flutter/src/scheduler/binding.dart:1176:5)
#285    _invoke (dart:ui/hooks.dart:312:13)
#286    PlatformDispatcher._drawFrame (dart:ui/platform_dispatcher.dart:419:5)
#287    _drawFrame (dart:ui/hooks.dart:283:31)

════════════════════════════════════════════════════════════════════════════════

════════ Exception caught by widgets library ═══════════════════════════════════
A RenderViewport expected a child of type RenderSliver but received a child of type RenderErrorBox.
The relevant error-causing widget was:
    SuperEditorImeDebugVisuals SuperEditorImeDebugVisuals:file:///Users/angelosilvestre/dev/super_editor/super_editor/lib/src/default_editor/document_ime/supereditor_ime_interactor.dart:479:12
════════════════════════════════════════════════════════════════════════════════

════════ Exception caught by widgets library ═══════════════════════════════════
A RenderViewport expected a child of type RenderSliver but received a child of type RenderErrorBox.
The relevant error-causing widget was:
    SuperEditorImeInteractor SuperEditorImeInteractor:file:///Users/angelosilvestre/dev/super_editor/super_editor/lib/src/default_editor/super_editor.dart:749:16
════════════════════════════════════════════════════════════════════════════════

════════ Exception caught by widgets library ═══════════════════════════════════
A RenderViewport expected a child of type RenderSliver but received a child of type RenderErrorBox.
The relevant error-causing widget was:
    CustomScrollView CustomScrollView:file:///Users/angelosilvestre/dev/super_editor/super_editor/lib/src/default_editor/document_scrollable.dart:212:16
════════════════════════════════════════════════════════════════════════════════

Expected behavior The editor shouldn't crash

Platform macOS

Flutter version 3.24.0 • channel stable

angelosilvestre commented 3 weeks ago

@matthew-carroll

matthew-carroll commented 3 weeks ago

FYI @knopp because I see some reference to slivers in here, so it might be related to your sliver work.

knopp commented 3 weeks ago

Seems like it would be. I'll take a look first thing tomorrow.