错误:SliverGeometry 无效:在 Flutter Sliver Grid View 布局中,“scrollExtent”为负数。

7
渲染库捕获到异常
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,

我在此链接中回答了这个问题 Satyam 的回答 - Satyam
4个回答

19

当我将0个项目传递给GridView.builder时,我发现我遇到了“scrollExtent为负”的错误。这发生在我的数据加载之前。

在我的构建函数中,我检查项目列表是否为零,如果是,则渲染一个空的Container()而不是GridView。这样就可以防止错误发生。

我认为这是GridView的一个错误,因为它应该能够优雅地处理没有记录的情况。


那真的帮了我,谢谢! - Soorya
这将有助于某些原因。谢谢。 - vietstone

2

1

对我来说,导致异常的是旧代码: old code

然后我开始搜索并尝试了一些更改。 在某个点上,我发现gridDelegate导致了异常。

然后经过一些更改: new code

我解决了我的异常。

注意:不要使用可能产生双精度值的任何数学运算!

希望这对您有所帮助。


1

我不确定你的代码是什么样子的,但是我在我的GridView.builder上使用了NotificationListener。

当我清空GridView的内容时,我遇到了这个错误。(在我的代码中,我有一个搜索过滤器,它会在保存时清除搜索结果,然后调用搜索函数)。一旦我添加了一个简单的标志来显示加载进度和如果结果为0则显示消息,错误就消失了。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接