flutter 中 ScrollExtent 为负值

Obi*_*si7 2 flutter-layout sliver-grid

我的 Flutter 应用程序的这一部分出现了一个非常讨厌的错误,但不知道为什么:

child: GridView.builder(
    gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
        crossAxisCount: 1,
        childAspectRatio: 4 / 3,
        mainAxisSpacing: 30.0,
        crossAxisSpacing: 20.0),
    padding: EdgeInsets.only(left: 20),
    scrollDirection: Axis.horizontal,
    itemCount: products.length,
    itemBuilder: (context, i) => ChangeNotifierProvider.value(
      value: products[i],
      child: Consumer<Product>(
        builder: (context, product, _) {
          return ProductCard(
              product: product,
              onSelected: (prod) {
                setState(() {
                  products.forEach(
                    (item) {
                      item.isSelected = false;
                    },
                  );
                  prod.isSelected = true;
                });
here's the error: SliverGeometry is not valid: The "scrollExtent" is negative.geometry: SliverGeometry(scrollExtent: -10.0, paintExtent: 20.0, maxPaintExtent: -10.0, cacheExtent: 20.0)
scrollExtent: -10.0
paintExtent: 20.0
maxPaintExtent: -10.0
cacheExtent: 20.0
Run Code Online (Sandbox Code Playgroud)

填充:EdgeInsets(20.0, 0.0, 0.0, 0.0)

此错误会阻止 Android 上的模拟,即使已安装 apk,但它无法运行。它在 iOS 上运行,但错误仍然存​​在。 包含产品的主页视图

Vin*_*nzo 5

很确定您已经解决了,但由于我没有看到任何可接受的答案,因此我将保留我的答案对其他人有用。

我处于同样的情况,也遇到了同样的问题,面团在横轴上。问题是您同时提供mainAxisSpacing: 30.0crossAxisSpacing: 20.0值。如果crossAxisCount: 1您没有使用主轴,则会mainAxisSpacing引发臭名昭著的SliverGeometry is not valid: The "scrollExtent" is negative.错误。独立于你的scrollingDirection你应该只传递该crossAxisSpacing值。

child: GridView.builder(
    gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
        crossAxisCount: 1,
        childAspectRatio: 4 / 3,
        crossAxisSpacing: 20.0),
    padding: EdgeInsets.only(left: 20),
    scrollDirection: Axis.horizontal,
    itemCount: products.length,
    itemBuilder: (context, i) => ChangeNotifierProvider.value(
      value: products[i],
      child: Consumer<Product>(
        builder: (context, product, _) {
          return ProductCard(
              product: product,
              onSelected: (prod) {
                setState(() {
                  products.forEach(
                    (item) {
                      item.isSelected = false;
                    },
                  );
                  prod.isSelected = true;
                });
Run Code Online (Sandbox Code Playgroud)