Ошибка: 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, ошибка исчезла.

Другие вопросы по тегам