Ошибка: SliverGeometry недействителен: параметр scrollExtent имеет отрицательное значение. в трепещущем режиме Sliver Grid View Laout
ИСКЛЮЧЕНИЕ, ПОГРЕШЕННОЕ ОТДАЧЕЙ БИБЛИОТЕКИ
The following assertion was thrown during performLayout():
SliverGeometry is not valid: The "scrollExtent" is negative.
The RenderSliver that returned the offending geometry was: RenderSliverGrid#f9778 relayoutBoundary=up2 NEEDS-LAYOUT NEEDS-PAINT:
creator: SliverGrid ← MediaQuery ← SliverPadding ← Viewport ← IgnorePointer-[GlobalKey#15db4] ←
Semantics ← _PointerListener ← Listener ← _GestureSemantics ←
RawGestureDetector-[LabeledGlobalKey<RawGestureDetectorState>#30301] ← _PointerListener ← Listener
← ⋯
parentData: paintOffset=Offset(0.0, 0.0) (can use size)
constraints: SliverConstraints(AxisDirection.down, GrowthDirection.forward, ScrollDirection.idle,
4 ответа
Я обнаружил, что получаю сообщение об ошибке «scrollExtent отрицательно», когда я передал 0 элементов в GridView.builder. Это происходило до загрузки моих данных.
В моей функции сборки я проверяю, равен ли список элементов нулю, и если это так, я визуализирую пустой Container() вместо Gridview. Это остановило возникновение ошибки.
Я считаю, что это ошибка GridView, так как он должен изящно обрабатывать записи.
Здесь есть связанная проблема. Все еще не решено.
ScrollExtent отрицателен при трепете
Кстати, вы можете проверить на Github.
https://github.com/flutter/flutter/issues/39963
И для воспроизведения ошибки: https://dartpad.dev/2630a061cf2632a1ffd6fb6c13c94e4c
для меня это старый код, вызывающий исключение: старый код
затем я начал поиски и попробовал внести некоторые изменения. В тот момент, когда я обнаружил, что gridDelegate вызывает исключение.
затем после некоторых изменений: новый код
Я исправил свое исключение.
Примечание: не используйте математические операции, такие как (/,*), которые могут привести к двойному значению !!! Я надеюсь, что это будет полезно для вас
Не уверен, как выглядит ваш код, но я использовал NotificationListener в своем GridView.builder.
Я получил эту ошибку, когда очистил содержимое своего Gridview. (В моем коде у меня есть фильтр поиска, который очищает результаты поиска при сохранении, а затем вызывает функцию поиска). Как только я добавил простой флаг, показывающий прогресс, указывающий при загрузке, и сообщение, если результаты равны 0, ошибка исчезла.